C#后期绑定操作Excel
2010-09-09 14:52
411 查看
后期绑定的好处是:对于不同版本的软件都能支持。如果机器A上安装的Office 2003,机器B上安装Office 2007,没问题,下面代码都能正常运行。但是如果采用前期绑定就不行了。关于“前期绑定和后期绑定”,“Excel专业开发”一书的3.3.3节(43页)说的非常清楚。
来自:http://h2appy.blog.51cto.com/609721/240830
测试结果:
private void Test() { DataTable table = new DataTable(); table.Columns.Add("ID", System.Type.GetType("System.Int32")); table.Columns.Add("Name", System.Type.GetType("System.String")); for (int i = 0; i < 10; i++) { DataRow row = table.NewRow(); row["ID"] = i; row["Name"] = "name" + i; table.Rows.Add(row); } try { this.Cursor = Cursors.AppStarting; //例如在中文系统下安装的是英文的Office,就需要指定CultureInfo为en-US ExportToExcel(table, new System.Globalization.CultureInfo("en-US")); this.Cursor = Cursors.Default; } catch (Exception ex) { MessageBox.Show("Exception /n" + ex.Message + "/nStack Trace: /n" + ex.StackTrace.ToString(), "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } public void ExportToExcel(System.Data.DataTable table) { ExportToExcel(table, System.Globalization.CultureInfo.CurrentCulture); } public void ExportToExcel(System.Data.DataTable table, System.Globalization.CultureInfo cultureInfoOfOffice) { object excel; object book; object books; object sheet; object sheets; object range; object[] parameters; Type ExcelType; parameters = new object[1]; //获取Excel类型 ExcelType = Type.GetTypeFromProgID("Excel.Application"); excel = Activator.CreateInstance(ExcelType); //获取workbooks集合 books = excel.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, excel, null); //新增workbook. //BUG:自动化 Excel 时出现“格式太旧或是类型库无效”错误 //http://support.microsoft.com/kb/320369/zh-cn //如果满足以下条件,在调用某个 Excel 方法时会收到此错误: //* 该方法需要一个 LCID(区域设置标识符)。 //* 运行的是英语版本的 Excel。但是,计算机的区域设置是针对非英语语言配置的。 //如果客户端计算机运行的是英语版本的 Excel 并且当前用户的区域设置配置为英语之外的某个语言,则 Excel 将尝试查找针对所配置语言的语言包。 //如果没有找到所需语言包,则会报告错误。 book = books.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, books, null, cultureInfoOfOffice); //获取worksheets集合 sheets = book.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, book, null); //获取第一个 worksheet. parameters[0] = 1; sheet = sheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, sheets, parameters); //获取A1单元格所在区域 object[] header = new Object[table.Columns.Count]; parameters = new object[1]; parameters[0] = "A1:" + Convert.ToString(Convert.ToChar(64 + table.Columns.Count)) + "1"; range = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, sheet, parameters); //在A1单元格中填充数据. parameters = new object[1]; for (int i = 0; i < table.Columns.Count; i++) { header[i] = table.Columns[i].ToString(); } parameters[0] = header; range.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, range, parameters, cultureInfoOfOffice); parameters = new object[2]; parameters[0] = "A2:" + Convert.ToString(Convert.ToChar(64 + table.Columns.Count)) + (table.Rows.Count + 1).ToString().Trim(); parameters[1] = Missing.Value; range = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, sheet, parameters); parameters = new object[1]; Object[,] data = new Object[table.Rows.Count, table.Columns.Count]; for (int i = 0; i < table.Rows.Count; i++) { for (int j = 0; j < table.Columns.Count; j++) { data[i, j] = table.Rows[i][j].ToString(); } } parameters[0] = data; range.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, range, parameters, cultureInfoOfOffice); parameters = new object[1]; //启动 Excel parameters[0] = true; excel.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, excel, parameters); excel.GetType().InvokeMember("UserControl", BindingFlags.SetProperty, null, excel, parameters); }
来自:http://h2appy.blog.51cto.com/609721/240830
测试结果:
相关文章推荐
- C#前期绑定和后期绑定操作Excel-------实现简单打印功能
- C#前期绑定和后期绑定操作Excel-------实现简单打印功能
- C#后期绑定操作Excel
- C#后期绑定操作Excel
- c# gridview操作:绑定特定列、导出Excel、导出WORD
- C#在客戶端和服務端操作Excel文件
- C#操作excel
- C#操作Excel时,Excel常用的方法和属性
- C#操作Excel(导入导出)
- c#操作Excel中的控件
- asp.net(C#)套用模板操作Excel
- C#操作Excel
- C# 操作Excel
- C#操作excel(多种方法比较)
- 【c#操作office】--OleDbDataAdapter 与OleDbDataReader方式读取excel,并转换为datatable
- C#对于excel的操作
- C#操作excel(多种方法比较)
- C#操作excel,如何调用模板
- [原]C#操作Excel-导出DataTable为excel
- [转]C#操作Excel开发报表系列整理