AceyOffice教程--报表之解决方案(二)
项目中生成报表,不免涉及到生成产品列表、员工列表、客户列表等各种列表,本文介绍如何更简单的生成列表。
假如我们要生成产品列表,先看下要生成的Excel文件的模板,如图:
在Excel中要生成这样的列表,需要人工一个一个单元格的输入值和设置单元格格式。如果产品比较多,工作量比较大。
现在我们看下Acey.ExcelX是如何解决这样的问题。
对于程序员来说,我们更熟悉面向对象中的数组和DataTable。我们也深知这样的理念,所以Acey.ExcelX的IWorksheet接口
提供了ImportArray和ImportDataTable方法。那么我们看下如何通过这2个办法来快速生成列表报表的。
方法一:使用ImportArray方法
View Code
1 public void Sample() 2 { 3 //创建工作薄对象。 4 IWorkbook workbook = ExcelxApplication.CreateWorkbook(); 5 //获取工作薄中默认样式。 6 IStyle defaultStyle = workbook.NormalStyle; 7 //设置工作薄中默认样式的字体。 8 defaultStyle.Font.Name = "Times New Roman"; 9 defaultStyle.Font.Size = 10; 10 //获取指定索引的工作表。 11 IWorksheet worksheet = workbook.Worksheets[0]; 12 //获取指定行和列索引的单元格对象。 13 ICell cell = worksheet.Cells[0, 0]; 14 //设置单元格值。 15 cell.Value = "Alphabetical List of Products"; 16 //设置单元格格式的字体。 17 cell.CellFormat.Font.Size = 12; 18 cell.CellFormat.Font.Color = Color.Blue; 19 20 //获取指定行和列索引的单元格对象。 21 cell = worksheet.Cells[1, 0]; 22 //设置单元格值。 23 cell.Value = new DateTime(2012, 12, 18); 24 //设置单元格格式的字体颜色。 25 cell.CellFormat.Font.Color = Color.Blue; 26 //定义二维数组。 27 object[,] array = new object[10, 4] 28 {{"Product Name", "Category Name", "Quantity Per Unit","Units In Stock"}, 29 {"Aniseed Syrup", "Condiments", "12 - 550 ml bottles", 13}, 30 {"Boston Crab Meat", "Seafood", "24 - 4 oz tins", 123}, 31 {"Camembert Pierrot", "Dairy Products","15 - 300 g rounds", 19}, 32 {"Carnarvon Tigers", "Seafood", "16 kg pkg.", 42}, 33 {"Chai","Beverages","10 boxes x 20 bags",39}, 34 {"Chang", "Beverages", "24 - 12 oz bottles", 17}, 35 {"Chartreuse verte", "Beverages", "750 cc per bottle", 69}, 36 {"Chef Anton's Cajun Seasoning", "Condiments", "48 - 6 oz jars", 53}, 37 {"Chocolade", "Confections", "10 pkgs.", 15}}; 38 //导入二维数组到工作表指定的位置。 39 worksheet.ImportArray(array, 4, 0); 40 //插入行。 41 worksheet.InsertRow(5); 42 //创建单元格区域对象。 43 IRange range = worksheet.Cells.CreateRange("B5:E5"); 44 //设置该单元格区域的字体属性。 45 range.CellFormat.Font.Size = 12; 46 range.CellFormat.Font.Bold = true; 47 //保存该工作薄为指定类型。 48 workbook.SaveAs(@"d:\book1.xls", FileFormat.Excel97To2003); 49 }
用ImportArray方法前,先初定义并始化该二维数组,然后用 worksheet.ImportArray(array, 4, 0);将该二维数组的值从第5行第1列的位置开始写入。
方法二:使用DataTable方法
View Code
1 public void Sample() 2 { 3 //创建工作薄对象。 4 IWorkbook workbook = ExcelxApplication.CreateWorkbook(); 5 //获取工作薄中默认样式。 6 IStyle defaultStyle = workbook.NormalStyle; 7 //设置工作薄中默认样式的字体。 8 defaultStyle.Font.Name = "Times New Roman"; 9 defaultStyle.Font.Size = 10; 10 //获取指定索引的工作表。 11 IWorksheet worksheet = workbook.Worksheets[0]; 12 //获取指定行和列索引的单元格对象。 13 ICell cell = worksheet.Cells[0, 0]; 14 //设置单元格值。 15 cell.Value = "Alphabetical List of Products"; 16 //设置单元格格式的字体。 17 cell.CellFormat.Font.Size = 12; 18 cell.CellFormat.Font.Color = Color.Blue; 19 20 //获取指定行和列索引的单元格对象。 21 cell = worksheet.Cells[1, 0]; 22 //设置单元格值。 23 cell.Value = new DateTime(2012, 12, 18); 24 //设置单元格格式的字体颜色。 25 cell.CellFormat.Font.Color = Color.Blue; 26 27 System.Data.DataTable table = new DataTable(); 28 table.Columns.Add("Product Name", typeof(string)); 29 table.Columns.Add("Category Name", typeof(string)); 30 table.Columns.Add("Quantity Per Unit", typeof(string)); 31 table.Columns.Add("Units In Stock", typeof(int)); 32 table.Rows.Add(new object[] {"Aniseed Syrup", "Condiments", "12 - 550 ml bottles", 13}); 33 table.Rows.Add(new object[] {"Boston Crab Meat", "Seafood", "24 - 4 oz tins", 123}); 34 table.Rows.Add(new object[] {"Camembert Pierrot", "Dairy Products","15 - 300 g rounds", 19}); 35 table.Rows.Add(new object[] {"Carnarvon Tigers", "Seafood", "16 kg pkg.", 42}); 36 table.Rows.Add(new object[] {"Chai","Beverages","10 boxes x 20 bags",39}); 37 table.Rows.Add(new object[] {"Chang", "Beverages", "24 - 12 oz bottles", 17}); 38 table.Rows.Add(new object[] {"Chartreuse verte", "Beverages", "750 cc per bottle", 69}); 39 table.Rows.Add(new object[] {"Chef Anton's Cajun Seasoning", "Condiments", "48 - 6 oz jars", 53}); 40 table.Rows.Add(new object[] {"Chocolade", "Confections", "10 pkgs.", 15}); 41 //导入DataTable到工作表指定的位置。 42 worksheet.ImportDataTable(table, true, 4, 0); 43 //插入行。 44 worksheet.InsertRow(5); 45 //创建单元格区域对象。 46 IRange range = worksheet.Cells.CreateRange("B5:E5"); 47 //设置该单元格区域的字体属性。 48 range.CellFormat.Font.Size = 12; 49 range.CellFormat.Font.Bold = true; 50 //保存该工作薄为指定类型。 51 workbook.SaveAs(@"d:\book1.xls", FileFormat.Excel97To2003); 52 }
用ImportDataTable方法前,先初始化DataTable对象,然后用worksheet.ImportDataTable(table, true, 4, 0);方法将该DataTable中包含的值写入到第5行第1列的位置,其中第二个参数true,表示连同DataTable的FieldName一起写入。如果不需要设置为false即可。
本文中描述了Acey.ExcelX的IWorksheet接口的ImportArray和ImportDataTable方法,能快速导入大量数据到工作表中,Acey.ExcelX还提供很多类似的方法和属性来帮助用户
更简单更快的生成Excel报表。
Acey.ExcelX组件专注于为用户提供更好的解决方案。