Asp.net匯出Excel續章(自訂合併儲存格,非Office組件)

來源:互聯網
上載者:User

標籤: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組件使用方法(轉載)

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.