ASP.NET無需Office自動化導出生成Excel表格

很多情況下,軟件開發者需要從數據庫讀取數據,然後將數據動態填充到手工預先準備好的Excel模板文件裏,這對於生成複雜格式的Excel報表文件非常有用,這個功能應用PageOffice的基本動態填充功能即可實現。但若是用戶想動態生成一個沒有固定模版格式的Excel報表時,換句話說,沒有辦法事先準備一個固定格式的模板時,就需要開發人員用後臺代碼實現Excel報表的動態生成功能了,即通過後臺代碼在Excel的工作表上畫出相應表格,實現Excel文件的從零到有。這裏的“零”指的是Excel空白文件。

下面我就如何通過後臺代碼實現在空白Excel文件中畫表格,這一問題的具體步驟和大家分享一下。

就以通過後臺自動生成一張“出差開支預算表”爲例來向大家介紹一下吧。

第一步:請先安裝PageOffice的服務器端的安裝程序,之後在你的網站中根目錄下添加pageoffice文件夾(在PageOffice官方網站的“下載中心”中可下載相應的壓縮包,解壓之後直接將PageOffice實例代碼裏的pageoffice文件夾拷貝到根目錄下就可以了)。

第二步:在網站中添加文件夾存放excel模板文件,我習慣命名爲“xls”,添加的模版文件是“test2.xls”。

第三步:在網站中創建動態頁面Excel.aspx。在工具箱中拖動一個PageOfficeCtrl控件到頁面上(PageOfficeCtrl控件位於工具箱最下方),並設置控件所在層(<div></div>)的高和寬。

第四步:在Excel.aspx.cs中,利用PageOfficeCtrl控件“畫”出相應的Excel表格,部分代碼如下:

// 定義工作薄(Workbook)對象

PageOffice.ExcelWriter.Workbook wb = newPageOffice.ExcelWriter.Workbook();

//定義table對象,“Sheet1”爲打開的工作薄中的表單名稱

PageOffice.ExcelWriter.Table backGroundTable = wb.OpenSheet("Sheet1").OpenTable("A1:P200");

//設置背景顏色

backGroundTable.Border.LineColor= Color.White;


//設置標題

//打開table對象

wb.OpenSheet("Sheet1").OpenTable("A1:H2").Merge();

//設置table中行高

wb.OpenSheet("Sheet1").OpenTable("A1:H2").RowHeight = 30;

//定義單元格對象

PageOffice.ExcelWriter.Cell A1 = wb.OpenSheet("Sheet1").OpenCell("A1");


//設置單元格內容的對齊方式

//設置水平對齊方式

A1.HorizontalAlignment= PageOffice.ExcelWriter.XlHAlign.xlHAlignCenter;

//設置垂直對齊方式

A1.VerticalAlignment= PageOffice.ExcelWriter.XlVAlign.xlVAlignCenter;

//設置單元格前景色

A1.ForeColor= Color.FromArgb(0, 128, 128);

//給單元格賦值

A1.Value = "出差開支預算";

//單元格字體加粗

A1.Font.Bold= true;

//設置單元格字體大小

A1.Font.Size= 25;


#region畫表頭

//定義TableBorder對象(此處相當於設置單元格的邊框)

PageOffice.ExcelWriter.Border C4Border = wb.OpenSheet("Sheet1").OpenTable("C4:C4").Border;

//設置邊框的寬度樣式

C4Border.Weight= PageOffice.ExcelWriter.XlBorderWeight.xlThick;

//設置邊框線的顏色(注意:表格邊框的顏色疊加問題:哪個顏色想顯示在最上面,哪個表格的邊框顏色後設置

C4Border.LineColor= Color.Yellow;


PageOffice.ExcelWriter.Table titleTable = wb.OpenSheet("Sheet1").OpenTable("B4:H5");

titleTable.Border.Weight= PageOffice.ExcelWriter.XlBorderWeight.xlThick;

//設置邊框線的顏色(表格C4Border的上邊框顏色將被表格titleTable的邊框顏色覆蓋

titleTable.Border.LineColor= Color.FromArgb(0, 128, 128);

//設置表格邊框樣式

titleTable.Border.BorderType= PageOffice.ExcelWriter.XlBorderType.xlAllEdges;

#endregion


#region畫表體


PageOffice.ExcelWriter.Table bodyTable = wb.OpenSheet("Sheet1").OpenTable("B6:H15");

//設置table的邊框

bodyTable.Border.LineColor= Color.Gray;

bodyTable.Border.Weight= PageOffice.ExcelWriter.XlBorderWeight.xlHairline;

......

#endregion


#region畫表尾

//畫表尾

PageOffice.ExcelWriter.Border H16H17Border = wb.OpenSheet("Sheet1").OpenTable("H16:H17").Border;

H16H17Border.LineColor= Color.FromArgb(204, 255, 204);


PageOffice.ExcelWriter.Border E16G17Border = wb.OpenSheet("Sheet1").OpenTable("E16:G17").Border;

E16G17Border.LineColor= Color.FromArgb(0, 128, 128);


ageOffice.ExcelWriter.Table footTable = wb.OpenSheet("Sheet1").OpenTable("B16:H17");

footTable.Border.Weight= PageOffice.ExcelWriter.XlBorderWeight.xlThick;

footTable.Border.LineColor= Color.FromArgb(0, 128, 128);

footTable.Border.BorderType= PageOffice.ExcelWriter.XlBorderType.xlAllEdges;

#endregion


#region設置行高列寬

//設置行高列寬

wb.OpenSheet("Sheet1").OpenTable("A1:A1").ColumnWidth = 1;

wb.OpenSheet("Sheet1").OpenTable("B1:B1").ColumnWidth = 20;

......


wb.OpenSheet("Sheet1").OpenTable("A16:A16").RowHeight = 20;

wb.OpenSheet("Sheet1").OpenTable("A17:A17").RowHeight = 20;

#endregion


//批量設置表格中字體大小爲10

for (inti = 0; i < 12; i++)

{

for (intj = 0; j < 7; j++)

     {

         wb.OpenSheet("Sheet1").OpenCellRC(4+ i, 2 + j).Font.Size = 10;

     }

}


#region填充單元格背景顏色


//填充單元格背景色

for (inti = 0; i < 10; i++)

{

    wb.OpenSheet("Sheet1").OpenCell("H" + (6 + i).ToString()).BackColor = Color.FromArgb(255, 255, 153);

}


wb.OpenSheet("Sheet1").OpenCell("E16").BackColor = Color.FromArgb(0, 128, 128);

wb.OpenSheet("Sheet1").OpenCell("F16").BackColor = Color.FromArgb(0, 128, 128);

......


wb.OpenSheet("Sheet1").OpenCell("H16").BackColor = Color.FromArgb(204, 255, 204);

wb.OpenSheet("Sheet1").OpenCell("H17").BackColor = Color.FromArgb(204, 255, 204);

#endregion


#region填充單元格文本和公式


//填充單元格文本

PageOffice.ExcelWriter.Cell B4 = wb.OpenSheet("Sheet1").OpenCell("B4");

B4.Font.Bold= true;

B4.Value = "出差開支預算";

PageOffice.ExcelWriter.Cell H5 = wb.OpenSheet("Sheet1").OpenCell("H5");

H5.Font.Bold= true;

H5.Value = "總計";

H5.HorizontalAlignment= PageOffice.ExcelWriter.XlHAlign.xlHAlignCenter;

......


wb.OpenSheet("Sheet1").OpenCell("C6").Value = "機票單價(往)";

wb.OpenSheet("Sheet1").OpenCell("C7").Value = "機票單價(返)";

......

//填充單元格公式

wb.OpenSheet("Sheet1").OpenCell("H6").Formula = "=D6*F6";

wb.OpenSheet("Sheet1").OpenCell("H7").Formula = "=D7*F7";

......


//填充單元格文本顯示格式(¥.0.00

for (inti = 0; i < 10; i++)

{

wb.OpenSheet("Sheet1").OpenCell("D"+(6 +i).ToString()).NumberFormatLocal = "#,##0.00;-#,##0.00";

wb.OpenSheet("Sheet1").OpenCell("H"+(6 +i).ToString()).NumberFormatLocal = "#,##0.00;-#,##0.00";

}



PageOffice.ExcelWriter.Cell E16 = wb.OpenSheet("Sheet1").OpenCell("E16");

E16.Font.Bold= true;

E16.Font.Size= 11;

E16.ForeColor= Color.White;

E16.Value = "出差開支總費用";

E16.VerticalAlignment= PageOffice.ExcelWriter.XlVAlign.xlVAlignCenter;

PageOffice.ExcelWriter.Cell E17 = wb.OpenSheet("Sheet1").OpenCell("E17");

E17.Font.Bold= true;

E17.Font.Size= 11;

E17.ForeColor= Color.White;

E17.Formula ="=IF(C4>H16,\"低於預算\",\"超出預算\")";

E17.VerticalAlignment= PageOffice.ExcelWriter.XlVAlign.xlVAlignCenter;

PageOffice.ExcelWriter.Cell H16 = wb.OpenSheet("Sheet1").OpenCell("H16");

H16.VerticalAlignment= PageOffice.ExcelWriter.XlVAlign.xlVAlignCenter;

H16.NumberFormatLocal= "#,##0.00;-#,##0.00";

H16.Font.Name= "Arial";

H16.Font.Size= 11;

H16.Font.Bold= true;

H16.Formula ="=SUM(H6:H15)";

PageOffice.ExcelWriter.Cell H17 = wb.OpenSheet("Sheet1").OpenCell("H17");

H17.VerticalAlignment= PageOffice.ExcelWriter.XlVAlign.xlVAlignCenter;

H17.NumberFormatLocal= "#,##0.00;-#,##0.00";

H17.Font.Name= "Arial";

H17.Font.Size= 11;

H17.Font.Bold= true;

H17.Formula ="=(C4-H16)";

#endregion


#region填充數據

//填充數據

PageOffice.ExcelWriter.Cell C4 = wb.OpenSheet("Sheet1").OpenCell("C4");

C4.NumberFormatLocal= "#,##0.00;-#,##0.00";

C4.Value = "2500";

PageOffice.ExcelWriter.Cell D6 = wb.OpenSheet("Sheet1").OpenCell("D6");

D6.NumberFormatLocal= "#,##0.00;-#,##0.00";

D6.Value = "1200";

wb.OpenSheet("Sheet1").OpenCell("F6").Font.Size = 10;

wb.OpenSheet("Sheet1").OpenCell("F6").Value = "1";

PageOffice.ExcelWriter.Cell D7 = wb.OpenSheet("Sheet1").OpenCell("D7");

D7.NumberFormatLocal= "#,##0.00;-#,##0.00";

D7.Value = "875";

wb.OpenSheet("Sheet1").OpenCell("F7").Value = "1";


#endregion


//打開文件

string fileName = "test2.xls";

PageOfficeCtrl1.ServerPage= "pageoffice/server.aspx";

PageOfficeCtrl1.SetWriter(wb);

PageOfficeCtrl1.WebOpen(Server.MapPath("doc/") + fileName, PageOffice.OpenModeType.xlsNormalEdit, "somebody");


查看運行結果就會發現,原來緊靠編程從一個空白的excel文件中完美生成Excel表格也是如此的簡單。

方案總結:

利用PageOffice組件實現後臺畫出Excel報表是很容易的。它既能在線對Excel表格內容進行排版,又能在後臺修改內容(可實現內容的動態填充,具體編寫過程可參考卓正網站的下載中心上的示例),實現Excel報表內容的從無到有。利用PageOffice組件可以很容易的就畫出自己想要的複雜、美觀的Excel表格,大大的節省了程序員的開發時間,提升了開發效率,而且實現的功能更加全面,解決了開發OA系統的程序員的一大技術難題。

另外,利用PageOffice組件還能在頁面上添加自定義按鈕,向Excel表格中插入電子印章、手寫簽名等信息,並能在線保存和打印等,方便用戶的使用;同時也可從數據庫獲取數據,動態填充Excel表格,在次就不多贅述了。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章