asp.net(c#) 将dbf转换为xls或wps,并将数据的列名改成中文;并判断本机是否安装office2003,2007和wps2007,2010...
using Microsoft.Office.Interop.Excel;//轉換為excel時,需要引用此命名空間
using ET;//轉換為wps時,需要引用此命名空間
using KSO;//轉換為wps時,需要引用此命名空間
當轉換為excel時,需要引入Microsoft.Office.Interop.Excel.dll;當轉換為wps時,需要引入Interop.ET.dll,Interop.KSO.dll;
?
#region 查詢注冊表,判斷本機是否安裝office2003,2007和wps
??????? public int ExistsRegedit()
??????? {
??????????? int ifused = 0;
??????????? RegistryKey rk = Registry.LocalMachine;
??????????? RegistryKey akey = rk.OpenSubKey(@"SOFTWARE\Microsoft\Office\11.0\Excel\InstallRoot\");//查詢2003
RegistryKey akey07 = rk.OpenSubKey(@"SOFTWARE\Microsoft\Office\12.0\Excel\InstallRoot\");//查詢2007
??????????? RegistryKey akeytwo = rk.OpenSubKey(@"SOFTWARE\Kingsoft\Office\6.0\common\");//查詢wps
??????????? //檢查本機是否安裝Office2003
??????????? if (akey != null)
??????????? {
??????????????? string file03 = akey.GetValue("Path").ToString();
??????????????? if (File.Exists(file03 + "Excel.exe"))
??????????????? {
??????????????????? ifused += 1;
??????????????? }
??????????? }
//檢查本機是否安裝Office2007
??????????? if (akey07 != null)
??????????? {
??????????????? string file07 = akey.GetValue("Path").ToString();
??????????????? if (File.Exists(file07 + "Excel.exe"))
??????????????? {
??????????????????? ifused += 2;
??????????????? }
??????????? }
??????????? //檢查本機是否安裝wps
??????????? if (akeytwo != null)
??????????? {
??????????????? string filewps = akeytwo.GetValue("InstallRoot").ToString();
??????????????? if (File.Exists(filewps + @"\office6\et.exe"))
??????????????? {
??????????????????? ifused += 4;
??????????????? }
??????????? }
??????????? return ifused;
??????? }
??????? #endregion
?
?
#region 將DBF文件放入DataSet
??????? private DataSet DbfToDs(string my_TablePath, string my_TableName)
??????? {
??????????? //數據庫連接定義
??????????? OleDbConnection my_conn; //數據連接
??????????? OleDbDataAdapter my_Adapter;//數據適配器
??????????? DataSet my_Ds = null;
??????????? 數據庫連接
??????????? try
??????????? {
??????????????? string path = my_TablePath.Substring(0, my_TablePath.LastIndexOf("\\")) + "\\";
??????????????? string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=dBASE IV;Persist Security Info=False;";
??????????????? string my_StrSelect = "SELECT * FROM " + my_TableName;
??????????????? my_conn = new OleDbConnection(connString);
??????????????? my_Adapter = new OleDbDataAdapter(my_StrSelect, my_conn);
??????????????? my_Ds = new DataSet();
??????????????? //填充數據集
??????????????? my_Adapter.Fill(my_Ds, my_TableName);
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? MessageBox.Show("選擇文件格式不正確,請選擇.dbf文件!", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
??????????? }
??????????? return my_Ds;
??????? }
??????? #endregions
?
#region 把數據文件導入到.xls文件
??????? public void ExportToExcel(DataSet ds)
??????? {
??????????? if (ds.Tables.Count != 0)
??????????? {
??????????????? //創建excel文件
??????????????? Microsoft.Office.Interop.Excel.Application myExcel = new Microsoft.Office.Interop.Excel.ApplicationClass();
??????????????? //打開已有的文件
??????????????? Microsoft.Office.Interop.Excel.Workbook xBook = myExcel.Workbooks._Open(txtPath.Text , Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
??????????????? //指定要操作的sheet
??????????????? Microsoft.Office.Interop.Excel.Worksheet xSheet = (Microsoft.Office.Interop.Excel.Worksheet)xBook.Sheets[1];
??????????????? #region 改成中文列名
??????????????? xSheet.Cells[1, 1] = "程序員";
?????????????????.
.
.
????????????????//改成中文列名時,可將中文列名放入string[]中,然后循環此數組,將第一行改成相應的中文列名?????????????
??????????????? #endregion
??????????????? xBook.SaveAs(txtPath.Text, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
??????????????? myExcel.Visible = true;
??????????? }
??????????? else
??????????? {
??????????????? System.Windows.Forms.MessageBox.Show("No Data");
??????????? }
??????? }
??????? #endregion
?
#region 把數據文件導出為wps
??????? public void ExportToWps(DataSet ds)
??????? {
??????????? if (ds.Tables.Count > 0)
??????????? {
??????????????? eTApp = new ET.Application();
??????????????? eTApp.Visible = false;
??????????????? eTWorkBook = eTApp.Workbooks.Open(txtPath.Text, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
??????????????? eTWorkSheet = (ET.Worksheet)eTWorkBook.Worksheets[1];
??????????????? #region 改成中文列名
??????????????? eTWorkBook.ActiveSheet.Cells.set_Item(1, 1, "程序員")
??????????????? #endregion
??????????????? eTWorkBook.SaveAs(txtPath.Text, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, ETSaveAsAccessMode.etNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
??????????????? eTApp.Visible = true;
??????????? }
??????? }
??????? #endregion
當轉換成xls或者wps時,一般都是循環dataset然后將數據寫入每一個單元格,但是當數據量大時轉換速度會很慢;所以將數據放入dataset后,可以使用file.copy(文件1,文件2);這樣速度會快很多;
轉載于:https://www.cnblogs.com/scgw/archive/2011/09/19/2181145.html
總結
以上是生活随笔為你收集整理的asp.net(c#) 将dbf转换为xls或wps,并将数据的列名改成中文;并判断本机是否安装office2003,2007和wps2007,2010...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “翩翩翔禽罗”下一句是什么
- 下一篇: C# winform对话框用法大全收藏