c# 不采用引用的方式操作Excel
2010-01-20 13:18
447 查看
这里讨论的是使用.NET操作Excel从面生成Excel文档,比如导出数据或从Excel中读取数据。
我们一般采用的是在项目里添加Excel的Com引用,这样会把所需的类型信息导入到当前程序集中便于使用Excel的相关对象。这种方式类型明确,易于操作,很容易上手。可是这种方式有着一个非常明显的问题,就是Excel版本的问题。因为我们引用Excel的Com组件信息的时候使用的是本机的已安装的Excel,当把项目换到其它机子上的时候或部署到其它的用户机上的时候,可能目标机的Excel跟本就不和程序里引用的版本相兼容,这样要么程序报错,要么操作无效。直接影响了使用。
为了解决这个版本上的不一致问题,我们可以采用非引用Com的方式来使用或操作Excel,或叫后期绑定,相对来说引用的方式就叫前期绑定。下面的代码示例表示对一个DataTabl导出到Excel的操作。通过传入必要的参数信息,代码能够把一个DataTable对象的内容导入到一个Excel文件中,并可无限制的由Excel应用程序打开。为了方便查找或能帮到有相关问题的网友,特把代码粘到这里以共享:
我们一般采用的是在项目里添加Excel的Com引用,这样会把所需的类型信息导入到当前程序集中便于使用Excel的相关对象。这种方式类型明确,易于操作,很容易上手。可是这种方式有着一个非常明显的问题,就是Excel版本的问题。因为我们引用Excel的Com组件信息的时候使用的是本机的已安装的Excel,当把项目换到其它机子上的时候或部署到其它的用户机上的时候,可能目标机的Excel跟本就不和程序里引用的版本相兼容,这样要么程序报错,要么操作无效。直接影响了使用。
为了解决这个版本上的不一致问题,我们可以采用非引用Com的方式来使用或操作Excel,或叫后期绑定,相对来说引用的方式就叫前期绑定。下面的代码示例表示对一个DataTabl导出到Excel的操作。通过传入必要的参数信息,代码能够把一个DataTable对象的内容导入到一个Excel文件中,并可无限制的由Excel应用程序打开。为了方便查找或能帮到有相关问题的网友,特把代码粘到这里以共享:
/// <summary> /// 把DataTable的数据导出到Excel文件中 /// </summary> /// <param name="fileName">Excel文件名</param> /// <param name="dataTable">要导出的数据表</param> /// <param name="errorInfo">操作出错信息</param> /// <returns>是否导出成功</returns> public static bool GenerateExcel(string fileName, DataTable dataTable, out string errorInfo) { errorInfo = null; object objApp; object objBook; object objBooks; object objSheets; object objSheet; object objCells; object[] Parameters; if (dataTable == null || dataTable.Rows.Count == 0) { return true; } try { // 获取Excel类型并建立其实例 Type objExcelType = Type.GetTypeFromProgID("Excel.Application"); if (objExcelType == null) { return false; } objApp = Activator.CreateInstance(objExcelType); if (objApp == null) { return false; } //获取Workbook集 objBooks = objApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, objApp, null); //添加一个新的Workbook objBook = objBooks.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, objBooks, null); //获取Sheet集 objSheets = objBook.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, objBook, null); //获取第一个Sheet对象 Parameters = new Object[1] { 1 }; objSheet = objSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, objSheets, Parameters); try { //写入表头信息 for (int i = 0; i < dataTable.Columns.Count; i++) { Parameters = new Object[2] { 1, i + 1 }; objCells = objSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, objSheet, Parameters); //向指定单元格填写内容值 Parameters = new Object[1] { dataTable.Columns[i].Caption }; objCells.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objCells, Parameters); } //写入表中数据内容 for (int i = 0; i < dataTable.DefaultView.Count; i++) { for (int col = 0; col < dataTable.Columns.Count; col++) { Parameters = new Object[2] { i + 2, col + 1 }; objCells = objSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, objSheet, Parameters); //向指定单元格填写内容值 Parameters = new Object[1] { dataTable.DefaultView[i][col].ToString() }; objCells.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objCells, Parameters); } } } catch (Exception operExce) { errorInfo = operExce.Message; return false; } finally { //不提示保存 Parameters = new Object[1] { false }; objApp.GetType().InvokeMember("DisplayAlerts", BindingFlags.SetProperty, null, objApp, Parameters); //保存文件并退出 Parameters = new Object[1] { fileName }; objBook.GetType().InvokeMember("SaveAs", BindingFlags.InvokeMethod, null, objBook, Parameters); objApp.GetType().InvokeMember("Quit", BindingFlags.InvokeMethod, null, objApp, null); } return true; } catch (Exception appExce) { errorInfo = appExce.Message; return false; } }
相关文章推荐
- 不采用引用的方式操作Excel收藏(转载)
- 不采用引用的方式操作Excel
- c#操作excel方式二:采用OleDB操作Excel文件
- c#操作excel方式二:采用OleDB操作Excel文件
- c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件
- C# 采用系统委托的方式处理线程内操作窗体控件
- C# 采用OLDB方式连接EXCEL
- c#中采用OLEDB方式来读取EXCEL文件和将数据写入EXCEL文件
- c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件
- C#操作Excel的OLEDB方式与COM方式比较
- 【c#操作office】--OleDbDataAdapter 与OleDbDataReader方式读取excel,并转换为datatable
- c#中采用OLEDB方式来读取EXCEL文件和将数据写入EXCEL文件
- c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件
- c#中采用OLEDB方式来读取EXCEL文件和将数据写入EXCEL文件
- C#操作EXCEL时,判断一个单元格是否为空的方式
- C#中Excel文件操作方式及操作类
- C# 在自定义线程中采用系统委托方式操作主窗体线程控件的方法
- c#操作excel方式一:stream简单读写excel
- C#操作Excel(打开、保存方式,设置单元格、字体操作,c#颜色转换为Excel颜色的方式)
- c#中采用OLEDB方式来读取EXCEL文件和将数据写入EXCEL文件