標籤:style blog http color 使用 os io 資料
結合上次寫的匯出Excel方法,這次上頭要求我將列頭進行一下合并
以前的效果:
改進後的效果:
在上篇文章中寫到了Excel的匯出方法,這次為了避免在生產環境中使用Office組件,伺服器各種許可權配置的麻煩,這次就不使用Office組件來產生Excel了。
上篇文章:Asp.net匯出Excel(HTML輸出)
關鍵代碼如:
說道這裡,其實主要思路已經很明顯了。
在資料繫結結束後,重新繪製表頭替換掉原來的表頭就行了。
TableCell自訂表格頭的時候是table標籤的,很方便。
另外發現了一個小技巧:
我使用Office Excel 2013 繪畫好表頭,然後直接複製,在Macromedia Dreamweaver 8的設計面板粘貼就可以貼上去了,然後轉到字碼頁面就可以快速得到table代碼。
最後貼上這幾句代碼:
1 gvw.HeaderRow.Cells.Clear();2 TableCell tc = new TableCell();3 //重新繪製表頭4 tc.Text = "<tr> ...... </tr>";5 gvw.HeaderRow.Cells.Add(tc);
重繪表頭
另外,看見博友推薦我使用NPOI.HSSF.Util組件,聽說很操作很方便。這裡也推薦啦!
//- 建立 Excel HSSFWorkbook hssfworkbook = new HSSFWorkbook(); //- 建立 Sheet var sheet = hssfworkbook.CreateSheet("淘汰選項報表"); //- Sheet 裡的每一個 Row NPOI.SS.UserModel.Row row; //- 建立一個“繪畫器”,這個繪畫器用於所有的圖片寫入。 //- 請注意,是所有的圖片,不可一張圖片建立一個!否則將導致沒有圖片 var patriarch = sheet.CreateDrawingPatriarch(); //- 預設儲存格的樣式以及字型,是“Excel 級”的,如果對其進行設定,將導致所有的儲存格都是這些字型以及樣式 //- 建立一個新的字型以及樣式,可以確保這些“儲存格”獨立的字型與樣式。 //- 這裡是建立一個標題的樣式 var cellFont = hssfworkbook.CreateFont(); var cellStyle = hssfworkbook.CreateCellStyle(); //- 加粗,白色前景色彩 cellFont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.BOLD; cellFont.Color = NPOI.HSSF.Util.HSSFColor.WHITE.index; //- 很費解 FillForegroundColor 這個屬性,我設定了是背景色,可從字義上來說,這個似乎叫“前景色彩”? //- 更令人無語的是,還有 FillBackgroundColor 屬性。真不知道做什麼的。 cellStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.GREY_40_PERCENT.index; //- 這個是填充的模式,可以是網格、花式等。如果需要填充單色,請使用:SOLID_FOREGROUND cellStyle.FillPattern = NPOI.SS.UserModel.FillPatternType.SOLID_FOREGROUND; //- 設定這個樣式的字型,如果沒有設定,將與所有儲存格擁有共同字型! cellStyle.SetFont(cellFont); for(int i = 0 ; i <= gridView1.RowCount ; i++) {//- 遍曆行 這是 GridControl 控制項的 GridView,i <= gridView1.RowCount的原因是首行我們設定為 標題列 row = sheet.CreateRow(i); foreach(GridColumn column in gridView1.Columns) { //- 確保只需要顯示的列 if(column.Visible) { //- 建立當前 row 指定列索引的 cell NPOI.SS.UserModel.Cell cell = row.CreateCell(column.VisibleIndex); //- 標題列 if(i == 0) { row.HeightInPoints = 50f; //- 設定行高 row.Height 需要 乘以 20 cell.SetCellValue(column.Caption); ; //-設定儲存格內容 cell.CellStyle = cellStyle; //- 設定儲存格的獨立樣式 } else { row.HeightInPoints = 100f; // 設定行高 row.Height 需要 乘以 20 object value = gridView1.GetRowCellValue(i - 1, column); //- 如果是一個圖片 if(value != null && value.GetType() == typeof(byte[])) { sheet.SetColumnWidth(column.VisibleIndex, 50 * 256);//- 設定列寬,需要 乘以 256 //- 插入圖片到 Excel,並返回一個圖片的標識 var pictureIdx = hssfworkbook.AddPicture((byte[])value, NPOI.SS.UserModel.PictureType.JPEG); //- 建立圖片的位置 var anchor = new HSSFClientAnchor( 0, 0, //- 上左 到 上右 的位置,是基於下面的行列位置 0, 0, //- 下左 到 下右 的位置,是基於下面的行列位置 column.VisibleIndex, i, column.VisibleIndex + 1, i + 1); //- 圖片輸出的位置這麼計算的: //- 假設我們要將圖片放置於第 5(E) 列的第 2 行 //- 對應索引為是 4 : 1 (預設位置) //- 放置的位置就等於(預設位置)到(預設位置各自加上一行、一列) patriarch.CreatePicture(anchor, pictureIdx);//- 使用繪畫器繪畫圖片 } else { cell.SetCellValue(value.ToStringOrEmpty()); } } //- 置中 cell.CellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.CENTER; cell.CellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER; //- 細邊緣 cell.CellStyle.BorderBottom = NPOI.SS.UserModel.CellBorderType.THIN; cell.CellStyle.BorderLeft = NPOI.SS.UserModel.CellBorderType.THIN; cell.CellStyle.BorderRight = NPOI.SS.UserModel.CellBorderType.THIN; cell.CellStyle.BorderTop = NPOI.SS.UserModel.CellBorderType.THIN; cell.CellStyle.BottomBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index; cell.CellStyle.LeftBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index; cell.CellStyle.RightBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index; cell.CellStyle.TopBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index; } } } FileStream file = new FileStream(fileName, FileMode.Create); hssfworkbook.Write(file);//- 儲存 file.Close();
NPOI.HSSF.Util組件使用方法(轉載)