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组件专注于为用户提供更好的解决方案。

 

posted @ 2013-01-22 09:35  AceyOffice  阅读(212)  评论(6编辑  收藏  举报