动态调用Excel,从而避免因为版本不同而使用程序无法编辑或调试
2013-05-28 14:37
302 查看
代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Reflection; namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string filePath=string.Empty; SaveFileDialog saveFile = new SaveFileDialog(); saveFile.Filter = "Excel 文件(*.xls)|*.xls|Excel 文件(*.xlsx)|*.xlsx|所有文件(*.*)|*.*"; if (saveFile.ShowDialog()==DialogResult.OK) { filePath = saveFile.FileName; } if (string.IsNullOrEmpty(filePath)) { return; } object objApp; object objBook; object objBooks; object objSheets; object objSheet; object objRange; object objCells; object[] Parameters; try { // 获取Excel类型并建立其实例 Type objExcelType = Type.GetTypeFromProgID("Excel.Application"); if (objExcelType == null) { return; } objApp = Activator.CreateInstance(objExcelType); if (objApp == null) { return; } //获取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 = 1; i < 100; i++) { Parameters = new Object[2] { 1, i }; objCells = objSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, objSheet, Parameters); //向指定单元格填写内容值 Parameters = new Object[1] { "Hello, World!" }; objCells.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objCells, Parameters); } } catch (Exception operException) { MessageBox.Show(operException.Message); } finally { //不提示保存 Parameters = new Object[1] { false }; objApp.GetType().InvokeMember("DisplayAlerts", BindingFlags.SetProperty, null, objApp, Parameters); //保存文件并退出 Parameters = new Object[1] { filePath }; objBook.GetType().InvokeMember("SaveAs", BindingFlags.InvokeMethod, null, objBook, Parameters); objApp.GetType().InvokeMember("Quit", BindingFlags.InvokeMethod, null, objApp, null); GC.Collect(); MessageBox.Show("Save successfully!"); } } catch (Exception theException) { String errorMessage; errorMessage = "Error: "; errorMessage = String.Concat(errorMessage, theException.Message); errorMessage = String.Concat(errorMessage, " Line: "); errorMessage = String.Concat(errorMessage, theException.Source); MessageBox.Show(errorMessage, "Error"); } } } }
相关文章推荐
- 态调用Excel避免因为版本不同而使用程序无法编辑或调试
- 包含别人的dll,然后我们用类库再次封装成dll的时候的注意事项;源文件与模块生成时的文件不同;创建调试信息文件 ··PDB时发生意外的错误,进程无法访问文件,因为另一个程序正在使用此文件
- 解决编辑SharePoint 的Excel文件时(使用本地Excel 2010) 报错。"Microsoft Excel 无法打开或修复此工作薄,因为它已损坏"
- iOS 不同版本调用系统拨打电话使用不同的方法,避免调用卡顿甚至奔溃。
- Windows下使用Sublime Text 2/3调试/运行 C/C++ 程序(可输入数据版本)
- 使用OLEDB读取不同版本Excel数据的连接字符串设置
- 使用Eclipse调试Android程序时无法安装控制台报错INSTALL_FAILED_UPDATE_INCOMPATIBLE
- 装64为office Access驱动的时候,无法安装64位版本的Office,因为在您的PC上找到了以下32位程序
- WinCE CAB Manager制作的安装包提示"您已经安装的程序可能无法正常显示,因为它是专门用于上一版本Windows Mobile 软件的"
- C++ 根据操作系统版本调用不同的动态链接库
- C++ primer 这本书上有这么两句话“派生类虚函数调用基类版本时,必须显式使用作用域操作符。如果派生类函数忽略了这样做,则函数调用会在运行时确定并且将是一个自身调用,从而导致无穷递归。”
- * java程序性能优化 Posted on 2010-07-28 16:04 chinaifne 阅读(2246) 评论(0) 编辑 收藏 一、避免在循环条件中使用复杂表达式
- 解决“安装程序无法继续,因为您的计算机上安装了更新的Internet Explorer版本”
- 无法安装64位版本的visio/office,因为在您的PC上找到了以下32位程序的解决办法
- .Net平台 C# 程序, 使用DILE(Dotnet IL Editor) 进行动态调试
- 使用linux的strace来调试程序系统调用
- C#技巧【调用线程无法访问此对象,因为另一个线程拥有该对象的问题的解决办法】【C#读写EXCEL源码提示“office检测到此文件存在一个问题。为帮助保护您的计算机,不能打开此文件”的解决】
- 使用Windows API实现运行时动态获取程序文件版本信息
- 无法跨越程序集边界使用程序集“DataCheck, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中的类型“List<ILayer>”,因为该类型有一个为嵌入互操作类型的泛型类型参数
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”