HSSFWorkbook hssfworkbook = new HSSFWorkbook();//初始化一個新的HSSFWorkbook實例
//#region 1.建立一個空的Excel
////*************************************建立一個空的Excel******************************************
////HSSFSheet sheet = hssfworkbook.CreateSheet("new sheet");
////hssfworkbook.CreateSheet("Sheet1");//必須加入建立Sheet的代碼才能保證生成的文件正常(若是須要多個,用一樣的方法,換個名字就能夠了)
//#endregion
//#region 2.建立單元格
////*************************************建立單元格******************************************
////要建立單元格首先要建立單元格所在的行,好比,下面的代碼建立了第0行:
//HSSFSheet sheet = hssfworkbook.CreateSheet("Sheet1");
//HSSFRow row1=sheet.CreateRow(0);//設置單元格行位置
////行建好了,就能夠建單元格了,好比建立A1位置的單元格:
//row1.CreateCell(0).SetCellValue("Just for Test");//設置單元格列位置,並填寫參數
////這裏要說明一下,SetCellValue有好幾種重載,你能夠設置單元格爲bool、double、DateTime、string和HSSFRichTextString類型。
////其中對於string類型的重載調用的就是HSSFRichTextString類型的重載,因此是同樣的,HSSFRichTextString可用於有字體或者Unicode的文本。
////若是你以爲每一行要聲明一個HSSFRow很麻煩,能夠用下面的方式:
////sheet1.CreateRow(0).CreateCell(0).SetCellValue("This is a Sample");
////這麼用有個前提,那就是第0行還沒建立過,不然得這麼用:
////sheet1.GetRow(0).CreateCell(0).SetCellValue("This is a Sample");
////注意:這裏的行在Excel裏是從1開始的,可是NPOI內部是從0開始的;
////列在Excel裏面是用字母表示的,而NPOI中也是用從0開始的數字表示的,因此要注意轉換。
////若是你要得到某一個已經建立的單元格對象,能夠用下面的代碼:
////sheet1.GetRow(row_index).GetCell(column_index);
//#endregion
//#region 3.建立批註
////**************************************建立批註******************************************
////批註的位置和大小,在Excel中是與單元格密切相關的,NPOI中經過HSSFClientAnchor的實例來表示,它的構造函數比較複雜,有8個參數,它們分別是
////dx1 第1個單元格中x軸的偏移量
////dy1 第1個單元格中y軸的偏移量
////dx2 第2個單元格中x軸的偏移量
////dy2 第2個單元格中y軸的偏移量
////col1 第1個單元格的列號
////row1 第1個單元格的行號
////col2 第2個單元格的列號
////row2 第2個單元格的行號
////若是咱們打算讓註釋顯示在B3和E5之間,就應該這麼寫:
//HSSFPatriarch patr = sheet.CreateDrawingPatriarch();
//HSSFComment comment1 = patr.CreateComment(new HSSFClientAnchor(0, 0, 0, 0, 1, 2 , 4, 4));
////下面咱們設置這個批註的內容和做者,這個比較簡單:
//comment1.String = new HSSFRichTextString("Hello World");
//comment1.Author = "NPOI Team";
////最後一步就是把批註賦給某個單元格:
//HSSFCell cell = sheet.CreateRow(1).CreateCell(0);
//cell.CellComment = comment1;
////對於批註,你有兩種選擇,一種是隱藏(默認),一種是顯示(即表單一打開就顯示該批註),能夠經過comment1.Visible屬性來控制。
//#endregion
//#region 4.設置單元格格式
////**************************************設置單元格格式******************************************
////使用NPOI時要注意,全部的格式都是經過CellStyle.DataFormat賦給單元格的,而不是直接賦給單元格。
////案例一 日期格式
////假設咱們如今須要顯示的日期的格式爲2008年5月5日,能夠用下面的代碼生成:
////HSSFSheet sheet1 = hssfworkbook.CreateSheet("new sheet");
//HSSFCell cell0 = sheet.CreateRow(2).CreateCell(0);
//cell0.SetCellValue(new DateTime(2008,5,5));
////set date format
//HSSFCellStyle cellStyle = hssfworkbook.CreateCellStyle();
//HSSFDataFormat format = hssfworkbook.CreateDataFormat();
//cellStyle.DataFormat = format.GetFormat("yyyy年m月d日");
//cell0.CellStyle=cellStyle;
////因爲這裏的「yyyy年m月d日」屬於自定義格式(區別於Excel內嵌的格式),
////因此必須用hssfworkbook.CreateDataFormat()建立一個HSSFDataFormat實例,而後使用format.GetFormat來獲取相應的格式,
////只要是Excel支持的格式表示方式,這種方式都可以實現。
////案例二 保留2位小數
////假設咱們有個單元格的值爲1.2,怎麼顯示成1.20呢?在Excel中能夠用「0.00」來表示,因此下面的代碼就能完成:
//// Create a row and put some cells in it. Rows are 0 based.
//HSSFCell cell1 = sheet.CreateRow(2).CreateCell(1);
////set value for the cell
//cell1.SetCellValue(1.2);
////number format with 2 digits after the decimal point - "1.20"
//HSSFCellStyle cellStyle1 = hssfworkbook.CreateCellStyle();
//cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");
//cell.CellStyle = cellStyle;
////這裏與上面有所不一樣,用的是HSSFDataFormat.GetBuiltinFormat()方法,之因此用這個,是由於0.00是Excel內嵌的格式,
////完整的Excel內嵌格式列表你們能夠看EXCEL---設置單元格格式------數字
////案例三 貨幣格式
////貨幣格式在金融的項目中常常用到,好比說人民幣符號¥,美圓符號$等,這裏能夠用下面的代碼表示:
//HSSFCell cell2 = sheet.CreateRow(2).CreateCell(2);
//cell2.SetCellValue(20000);
//HSSFCellStyle cellStyle2 = hssfworkbook.CreateCellStyle();
//HSSFDataFormat format2 = hssfworkbook.CreateDataFormat();
//cellStyle2.DataFormat = format.GetFormat("¥#,##0");
//cell2.CellStyle = cellStyle2;
////注意,這裏還加入了千分位分隔符,因此是#,##,至於爲何這麼寫,你得去問微軟,呵呵。
////案例四 百分比
////百分比在報表中也很經常使用,其實基本上和上面同樣,只是格式表示是0.00%,代碼以下:
//HSSFCell cell3 = sheet.CreateRow(2).CreateCell(3);
//cell3.SetCellValue(50);
//HSSFCellStyle cellStyle3 = hssfworkbook.CreateCellStyle();
//cellStyle3.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00%");
//cell3.CellStyle = cellStyle3;
////因爲這裏是內嵌格式,因此直接用HSSFDataFormat.GetBuiltinFormat便可。
////案例五 中文大寫
////在表示金額時,咱們時常會用到,我也見過很多兄弟實現了數字轉中文大小寫的工具類,之後你能夠嘗試讓Excel去處理這一切,
////代碼和剛纔差很少,也是改格式的表示:
//HSSFCell cell4 = sheet.CreateRow(2).CreateCell(4);
//cell4.SetCellValue("共和國");
//HSSFCellStyle cellStyle4 = hssfworkbook.CreateCellStyle();
//HSSFDataFormat format4 = hssfworkbook.CreateDataFormat();
//cellStyle4.DataFormat = format.GetFormat("[DbNum2][$-804]0");
//cell4.CellStyle = cellStyle4;
////因爲是自定義格式,因此用了HSSFDataFormat.GetFormat,相信你對這兩種獲取格式的形式的區別愈來愈熟悉了。
////案例六 科學計數法
////這東西數學課上咱們都學過,雖然用的很少,可是既然Excel支持,這裏也提一下:
////cellStyle3.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00E+00");
///*最後總結一下HSSFDataFormat.GetFormat和HSSFDataFormat.GetBuiltinFormat的區別:
//當使用Excel內嵌的(或者說預約義)的格式時,直接用HSSFDataFormat.GetBuiltinFormat靜態方法便可。
//當使用本身定義的格式時,必須先調用HSSFWorkbook.CreateDataFormat(),由於這時在底層會先找有沒有匹配的內嵌FormatRecord,
//若是沒有就會新建一個FormatRecord,因此必須先調用這個方法,而後你就能夠用得到的HSSFDataFormat實例的GetFormat方法了,
//固然相對而言這種方式比較麻煩,因此內嵌格式仍是用HSSFDataFormat.GetBuiltinFormat靜態方法更加直接一些。
//不過自定義的格式也不是天馬行空隨便定義,仍是要參照Excel的格式表示來定義,具體請看相關的Excel教程。
//注意:自定義的FormatRecord是嵌入xls文件內部的,因此不用擔憂對方Excel中有沒有定義過這種格式,都是可以正常使用的。
// */
//#endregion
//#region 5.單元格合併
////*************************************單元格合併******************************************
////爲了實現這一功能,NPOI引入了新的概念,即Region,由於合併單元格,其實就是設定一個區域。下面說一下Region類的參數,Region總共有4個參數:
////FirstRow 區域中第一個單元格的行號
////FirstColumn 區域中第一個單元格的列號
////LastRow 區域中最後一個單元格的行號
////LastColumn 區域中最後一個單元格的列號
////因爲單元格的合併都是在表的基礎上創建的,因此咱們得先建Sheet:
////HSSFWorkbook hssfworkbook = new HSSFWorkbook();
//HSSFSheet sheet5 = hssfworkbook.CreateSheet("單元格合併");
////接下來咱們根據實際場景來作一些演示。
////場景一 標題行的合併
////這種場景是最多見的,好比說咱們要創建一張銷售狀況表,英文叫Sales Report
////咱們先設置居中和字體樣式,這裏咱們採用20號字體,代碼以下:
//HSSFRow row5 = sheet5.CreateRow(0);
//HSSFCell cell5 = row5.CreateCell(0);
//cell5.SetCellValue("Sales Report");
//HSSFCellStyle style5 = hssfworkbook.CreateCellStyle();
//style5.Alignment = HSSFCellStyle.ALIGN_CENTER;
//HSSFFont font5 = hssfworkbook.CreateFont();
//font5.FontHeight = 20*20;
//style5.SetFont(font5);
//cell5.CellStyle = style5;
////要產生圖中的效果,即把A1:F1這6個單元格合併,而後添加合併區域:
//sheet5.AddMergedRegion(new Region(0, 0, 0, 5));
////場景二 多行合併
////看完場景一,你可不要認爲多行合併就須要一行一行作,其實也只須要一行代碼,好比說咱們要把C3:E5合併爲一個單元格,那麼就能夠用下面的代碼:
//sheet5.AddMergedRegion(new Region(2, 2, 4, 4));
////提示 即便你沒有用CreateRow和CreateCell建立過行或單元格,也徹底能夠直接建立區域而後把這一區域合併,
////Excel的區域合併信息是單獨存儲的,和RowRecord、ColumnInfoRecord不存在直接關係。
//#endregion
//#region 6.單元格對齊相關設置
////*************************************單元格對齊相關設置******************************************
////本節將圍繞「對齊」選項卡中的設置展開,雖然實際上你會發現該選項卡中的不少設置和對齊沒有什麼關係。
////首先咱們用代碼建立必要的單元格,代碼以下:
////HSSFWorkbook hssfworkbook = new HSSFWorkbook();
//HSSFSheet sheet6 = hssfworkbook.CreateSheet("單元格對齊相關設置");
//HSSFRow row6 = sheet6.CreateRow(0);
//row6.CreateCell(0).SetCellValue("Test");
////這裏咱們假設在A0單元格中加入了文本Test。
////請注意接下來咱們要作的全部操做都是在CellStyle的基礎上完成的,因此咱們建立一個HSSFCellStyle:
//HSSFCellStyle style6 = hssfworkbook.CreateCellStyle();
////水平對齊
////這裏用的是HSSFCellStyle.Alignment,默認值天然是常規,即HSSFCellStyle.ALIGN_GENERAL。
////若是是左側對齊就是
//style6.Alignment = HSSFCellStyle.ALIGN_LEFT;
////若是是居中對齊就是
//style6.Alignment = HSSFCellStyle.ALIGN_CENTER;
////若是是右側對齊就是
//style6.Alignment = HSSFCellStyle.ALIGN_RIGHT;
////若是是跨列舉中就是
//style6.Alignment = HSSFCellStyle.ALIGN_CENTER_SELECTION;
////若是是兩端對齊就是
//style6.Alignment = HSSFCellStyle.ALIGN_JUSTIFY;
////若是是填充就是
//style6.Alignment = HSSFCellStyle.ALIGN_Fill;
////注意:以上選項僅當有足夠的寬度時才能產生效果,不設置寬度恐怕看不出區別。
////垂直對齊
////這裏用的是HSSFCellStyle.VerticalAlignment,默認值爲居中,即HSSFCellStyle.VERTICAL_CENTER
////若是是靠上就是
//style6.VerticalAlignment = HSSFCellStyle.VERTICAL_TOP;
////若是是居中就是
//style6.VerticalAlignment = HSSFCellStyle.VERTICAL_CENTER;
////若是是靠下就是
//style6.VerticalAlignment = HSSFCellStyle.VERTICAL_BOTTOM;
////若是是兩端對齊就是
//style6.VerticalAlignment = HSSFCellStyle.VERTICAL_JUSTIFY;
////注意:以上選項僅當有足夠的高度時才能產生效果,不設置高度恐怕看不出區別。 git
////自動換行翻譯成英文其實就是Wrap的意思,因此這裏咱們應該用WrapText屬性,這是一個布爾屬性
//style6.WrapText = true;
////文本縮進
////這是一個不太引人注意的選項,因此這裏給張圖出來,讓你們知道是什麼,縮進說白了就是文本前面的空白,咱們一樣能夠用屬性來設置,
////這個屬性叫作Indention。
//style6.Indention = 3;
////文本旋轉
////文本方向你們必定在Excel中設置過,上圖中就是調整界面,主要參數是度數,那麼咱們如何在NPOI中設置呢?
//style6.Rotation=(short)90;
////以上代碼是把單元格A1中的文本逆時針旋轉90度
///*
// * 請注意,這裏的Rotation取值是從-90到90,而不是0-180度。
// * 最後別忘了把樣式變量style賦給HSSFCellStyle.CellStyle,不然就前功盡棄了,呵呵!
// * **/
//#endregion
//#region 7.設置單元格邊框
////*************************************設置單元格邊框******************************************
////邊框和其餘單元格設置同樣也是在HSSFCellStyle上操做的,HSSFCellStyle有2種和邊框相關的屬性,分別是:
////邊框相關屬性 說明 範例
////Border+方向 邊框類型 BorderTop, BorderBottom,BorderLeft, BorderRight
////方向+BorderColor 邊框顏色 TopBorderColor,BottomBorderColor, LeftBorderColor, RightBorderColor
////其中邊框類型分爲如下幾種:
////邊框範例圖 對應的靜態值
//// HSSFCellStyle.BORDER_DOTTED
//// HSSFCellStyle.BORDER_HAIR
//// HSSFCellStyle.BORDER_DASH_DOT_DOT
//// HSSFCellStyle.BORDER_DASH_DOT
//// HSSFCellStyle.BORDER_DASHED
//// HSSFCellStyle.BORDER_THIN
//// HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT
//// HSSFCellStyle.BORDER_SLANTED_DASH_DOT
//// HSSFCellStyle.BORDER_MEDIUM_DASH_DOT
//// HSSFCellStyle.BORDER_MEDIUM_DASHED
//// HSSFCellStyle.BORDER_MEDIUM
//// HSSFCellStyle.BORDER_THICK
//// HSSFCellStyle.BORDER_DOUBLE
////至於顏色那就不少了,所有在HSSFColor下面,如HSSFColor.GREEN, HSSFColor.RED,都是靜態實例,能夠直接引用。
////下面咱們假設咱們要把一個單元格的四周邊框都設置上,能夠用下面的代碼:
//HSSFSheet sheet7 = hssfworkbook.CreateSheet("設置單元格邊框");
//// Create a row and put some cells in it. Rows are 0 based.
//HSSFRow row7 = sheet7.CreateRow(1);
//// Create a cell and put a value in it.
//HSSFCell cell7 = row7.CreateCell(1);
//// Style the cell with borders all around.
//HSSFCellStyle style7 = hssfworkbook.CreateCellStyle();
//style7.BorderBottom= HSSFCellStyle.BORDER_THIN;
//style7.BorderLeft= HSSFCellStyle.BORDER_THIN;
//style7.BorderRight= HSSFCellStyle.BORDER_THIN;
//style7.BorderTop = HSSFCellStyle.BORDER_THIN ;
//cell7.CellStyle= style7;
////這段代碼使用了最普通的細邊框,使得這個單元格看上去像塊空心磚頭。
////注意:這裏咱們沒有設置邊框的顏色,但這不會影響最終的效果,由於Excel會用默認的黑色給邊框上色。
////若是要設置顏色的話,也很簡單,以下:
//style7.BottomBorderColor = HSSFColor.GREEN.index;
////以上代碼將底部邊框設置爲綠色,要注意,不是直接把HSSFColor.GREEN賦給XXXXBorderColor屬性,而是把index的值賦給它。
//#endregion
//#region 8.設置單元格字體
////*************************************設置單元格字體******************************************
////本節咱們將繼續使用NPOI來設置單元格格式,這一節咱們主要講如何設置「字體」。
////在設置字體以前,咱們首先要作的就是建立字體對象,這和建立數字格式很類似。
//HSSFFont font8 = hssfworkbook.CreateFont();
////這句話會在Excel文件內部建立相應的FontRecord,因此你不用客戶由於本身機器上的Excel沒有相應的字體設置而致使設置丟失。
////字體在設置完成後,咱們就能夠把它賦給單元格樣式,代碼以下:
//HSSFSheet sheet8 = hssfworkbook.CreateSheet("設置單元格字體");
//HSSFRow row8 = sheet8.CreateRow(0);
//HSSFCell cell8 = row8.CreateCell(0);
//HSSFCellStyle style8 = hssfworkbook.CreateCellStyle();
//style8.SetFont(font8);
//cell8.CellStyle=style8;
////這裏的cell1是HSSFCell的一個實例。
////好了,下面咱們就開始對字體進行設置。
////字體名稱
////這裏的字體名稱是經過HSSFFont.FontName進行設置的,至於具體的名稱,只要是經常使用字體均可以,好比說Arial, Verdana等
////,固然也能夠是中文字體名,如宋體、黑體等。不過設置字體名稱有個前提,那就是假設打開這個xls文件的客戶機上有這種字體
////,若是沒有,Excel將使用默認字體。
////下面就是設置字體名稱爲「宋體」的代碼:
//font8.FontName = "宋體";
////字號
////與字號有關的屬性有兩個,一個是FontHeight,一個是FontHeightInPoints。區別在於,FontHeight的值是FontHeightInPoints的20倍
////,一般咱們在Excel界面中看到的字號,好比說12,對應的是FontHeightInPoints的值,而FontHeight要產生12號字體的大小
////,值應該是240。因此一般建議你用FontHeightInPoint屬性。
////若是要設置字號爲12,代碼就是
//font8.FontHeightInPoints = 12;
////字體顏色
////這裏可能會與CellStyle上的ForegroundColor和BackgroundColor產生混淆,其實全部的字體顏色都是在HSSFFont的實例上設置的
////,CellStyle的ForegroundColor和BackgroundColor分別指背景填充色和填充圖案的顏色,和文本顏色無關。
////要設置字體顏色,咱們能夠用HSSFFont.Color屬性,顏色能夠經過HSSFColor得到,代碼以下所示:
//font8.Color = HSSFColor.RED.index;
////這行代碼把文本設置爲紅色。
////下劃線
////一般咱們所說的下劃線都是單線條的,其實Excel支持好幾種下劃線,以下所示:
////類型 對應的值
////單下劃線 HSSFFont.U_SINGLE
////雙下劃線 HSSFFont.U_DOUBLE
////會計用單下劃線 HSSFFont.U_SINGLE_ACCOUNTING
////會計用雙下劃線 HSSFFont.U_DOUBLE_ACCOUNTING
////無下劃線 HSSFFont.U_NONE
////當你要設置下劃線時,能夠用HSSFFont.Underline屬性,這是一個byte類型的值,例如
//font8.Underline = HSSFFont.U_SINGLE;
////這行代碼就是設置單下劃線的代碼。
////上標下標
////設置這東西能夠用HSSFFont.TypeOffset屬性,值有如下幾種:
////TypeOffset的值 說明
////HSSFFont.SS_SUPER 上標
////HSSFFont.SS_SUB 下標
////HSSFFont.SS_NONE 普通,默認值
////因此若是你要上標的話,能夠用下面的代碼:
//font8.TypeOffset=HSSFFont.SS_SUPER;
////刪除線
////設置這東西能夠用HSSFFont.IsStrikeout屬性,當爲true時,表示有刪除線;爲false則表示沒有刪除線。
//#endregion
//#region 9.設置單元格的背景和圖案
////*************************************設置單元格的背景和圖案******************************************
////在以前的教程中,咱們已經提到HSSFCellStyle有兩個背景顏色屬性,一個叫FillBackgroundColor,另外一個叫FillForegroundColor
////,但其實這指的都是背景顏色,那爲何還有ForegroundColor呢?爲了可以幫助你們理解,咱們舉一個實際的例子
////,下面這個圖案是Excel的一個單元格:(白線紅格的網格)
////線是白色的,背景是紅色的。這裏的線其實就是下面的Excel界面中的圖案:
////至於線的顏色則是圖案顏色,即白色。
////因此以上單元格若是要用NPOI來設置就能夠用如下代碼完成:
////fill background
//HSSFSheet sheet9 = hssfworkbook.CreateSheet("設置單元格的背景和圖案");
//HSSFCellStyle style9 = hssfworkbook.CreateCellStyle();
//style9.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.WHITE.index;
//style9.FillPattern = HSSFCellStyle.SQUARES;
//style9.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.RED.index;
//sheet9.CreateRow(7).CreateCell(0).CellStyle = style9;
////如今是否是清楚一些了,這裏的FillPattern就圖案樣式,全部的枚舉值都是HSSFCellStyle的常量;FillForegroundColor就是圖案的顏色
////,而FillBackgroundColor則是背景的顏色,即紅色。
//#endregion
//#region 10.設置單元格的寬度和高度
////*************************************設置單元格的寬度和高度******************************************
////在Excel中,單元格的寬度其實就是列的寬度,由於Excel假設這一列的單元格的寬度確定一致。因此要設置單元格的寬度
////,咱們就得從列的寬度下手,HSSFSheet有個方法叫SetColumnWidth,共有兩個參數:一個是列的索引(從0開始),一個是寬度。
////如今假設你要設置B列的寬度,就能夠用下面的代碼:
////HSSFWorkbook hssfworkbook = new HSSFWorkbook();
//HSSFSheet sheet10 = hssfworkbook.CreateSheet("設置單元格的寬度和高度");
//sheet10.SetColumnWidth(1, 100 * 256);
////這裏你會發現一個有趣的現象,SetColumnWidth的第二個參數要乘以256,這是怎麼回事呢?其實,這個參數的單位是1/256個字符寬度
////,也就是說,這裏是把B列的寬度設置爲了100個字符。
////剛纔說的是如何設置,那如何去讀取一個列的寬度呢?直接用GetColumnWidth方法,這個方法只有一個參數,那就是列的索引號。以下所示:
//int col1width = sheet10.GetColumnWidth(1);
////說完寬度,咱們來講高度,在Excel中,每一行的高度也是要求一致的,因此設置單元格的高度,其實就是設置行的高度
////,因此相關的屬性也應該在HSSFRow上,它就是HSSFRow.Height和HeightInPoints,這兩個屬性的區別在於HeightInPoints的單位是點
////,而Height的單位是1/20個點,因此Height的值永遠是HeightInPoints的20倍。
////要設置第一行的高度,能夠用以下代碼:
//sheet10.CreateRow(0).Height = 200*20;
////或者
//sheet10.CreateRow(0).HeightInPoints = 200;
////若是要得到某一行的行高,能夠直接拿HSSFRow.Height屬性的返回值。
////你可能以爲一行一行設置行高或者一列一列設置列寬很麻煩,那你能夠考慮使用HSSFSheet.DefaultColumnWidth
////、HSSFSheet.DefaultRowHeight和HSSFSheet.DefaultRowHeightInPoints屬性。
////一旦設置了這些屬性,若是某一行或者某一列沒有設置寬度,就會使用默認寬度或高度。代碼以下:
//sheet10.DefaultColumnWidth=100*256;
//sheet10.DefaultRowHeight=30*20;
//#endregion
////把HSSFWorkbook實例寫入文件
//FileStream file = new FileStream(Server.MapPath("test.xls"), FileMode.Create);
//hssfworkbook.Write(file);
//file.Close();
//*************************************基於模板******************************************
//read the template via FileStream, it is suggested to use FileAccess.Read to prevent file lock.
//book1.xls is an Excel-2007-generated file, so some new unknown BIFF records are added.
FileStream file11 = new FileStream(Server.MapPath("PayMain.xls"), FileMode.Open, FileAccess.Read);
HSSFWorkbook hssfworkbook11 = new HSSFWorkbook(file11);
HSSFSheet sheet11 = hssfworkbook11.GetSheet("Sheet2");
HSSFCellStyle style11 = hssfworkbook11.CreateCellStyle();
style11.BorderBottom = HSSFCellStyle.BORDER_THIN;
style11.BorderLeft = HSSFCellStyle.BORDER_THIN;
style11.BorderRight = HSSFCellStyle.BORDER_THIN;
style11.BorderTop = HSSFCellStyle.BORDER_THIN;
HSSFRow row11;
for (int i = 0; i < dt.Rows.Count; i++)
{
row11 = sheet11.CreateRow(7 + i);
for (int j = 0; j < 6; j++)
{
HSSFCell cell11 = row11.CreateCell(j);
cell11.SetCellValue(dt.Rows[i][j].ToString());
cell11.CellStyle = style11;
}
}
row11 = sheet11.CreateRow(dt.Rows.Count + 7);
HSSFCell cell11_ = row11.CreateCell(0);
cell11_.SetCellValue("合計:");
cell11_ = row11.CreateCell(3);
cell11_.SetCellValue("建表人:");
//HSSFRow row11 = sheet11.CreateRow(7);
//HSSFCell cell10 = row11.CreateCell(0);
//HSSFCell cell11 = row11.CreateCell(1);
//HSSFCell cell12 = row11.CreateCell(2);
//HSSFCell cell13 = row11.CreateCell(3);
//HSSFCell cell14 = row11.CreateCell(4);
//HSSFCell cell15 = row11.CreateCell(5);
//cell10.SetCellValue("tessssss");
//cell11.SetCellValue("teffffff");
//cell12.SetCellValue("tegggggsss");
//cell13.SetCellValue("tesssssfwefsss");
//cell14.SetCellValue("tesssssfwefsss");
//cell15.SetCellValue("tesssssfwefsss");
//sheet11.GetRow(9).GetCell(0).SetCellValue(300);
//sheet11.GetRow(10).GetCell(1).SetCellValue(500050);
//sheet11.GetRow(11).GetCell(1).SetCellValue(8000);
//sheet11.GetRow(12).GetCell(1).SetCellValue(110);
//sheet11.GetRow(13).GetCell(1).SetCellValue(100);
//sheet11.GetRow(14).GetCell(1).SetCellValue(200);
//sheet11.GetRow(15).GetCell(1).SetCellValue(210);
//sheet11.GetRow(16).GetCell(1).SetCellValue(2300);
//sheet11.GetRow(17).GetCell(1).SetCellValue(240);
//sheet11.GetRow(18).GetCell(1).SetCellValue(180123);
//sheet11.GetRow(19).GetCell(1).SetCellValue(150);
//Force excel to recalculate all the formula while open
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "T3"));
Response.Clear();
DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company = "NPOI Team";
hssfworkbook.DocumentSummaryInformation = dsi;
////create a entry of SummaryInformation
SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
si.Subject = "NPOI SDK Example";
hssfworkbook11.SummaryInformation = si;
MemoryStream file = new MemoryStream();
hssfworkbook11.Write(file);
Response.BinaryWrite(file.GetBuffer());
Response.End();
//sheet11.ForceFormulaRecalculation = true;
//FileStream file111 = new FileStream(Server.MapPath("T2.xls"), FileMode.Create);
//hssfworkbook11.Write(file111);
//file111.Close();