分享一個前輩的NPOIhelper


即拿即用:

首先要下載npoi的dll,此不贅述,接着添加引用:

using NPOI.HPSF;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;

下面是主要方法

public class NPOIHelper
    {
        /// <summary>
         /// DataTable導出到Excel文件
         /// </summary>
         /// <param name="dtSource">源DataTable</param>
         /// <param name="strHeaderText">表頭文本</param>
         /// <param name="strFileName">保存位置</param>
         public static void DataTableToExcel(DataTable dtSource, string strHeaderText, string strFileName)
         {
             using (MemoryStream ms = DataTableToExcel(dtSource, strHeaderText))
             {
                 using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))
                 {
                     byte[] data = ms.ToArray();
                     fs.Write(data, 0, data.Length);
                     fs.Flush();
                 }
             }
         }


       


        /// <summary>
        /// DataTable導出到Excel的MemoryStream
        /// </summary>
        /// <param name="dtSource">源DataTable</param>
        /// <param name="strHeaderText">表頭文本</param>
        public static MemoryStream DataTableToExcel(DataTable dtSource, string strHeaderText)
         {
             HSSFWorkbook workbook = new HSSFWorkbook();
             HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet();
 
             #region 右擊文件 屬性信息
             {
                 DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
                 dsi.Company = "NPOI";
                 workbook.DocumentSummaryInformation = dsi;
 
                 SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
                 si.Author = "文件作者信息"; //填加xls文件作者信息
                 si.ApplicationName = "創建程序信息"; //填加xls文件創建程序信息
                 si.LastAuthor = "最后保存者信息"; //填加xls文件最后保存者信息
                 si.Comments = "作者信息"; //填加xls文件作者信息
                 si.Title = "標題信息"; //填加xls文件標題信息
                 si.Subject = "主題信息";//填加文件主題信息
                 si.CreateDateTime = System.DateTime.Now;
                 workbook.SummaryInformation = si;
             }
             #endregion

             HSSFCellStyle dateStyle = (HSSFCellStyle)workbook.CreateCellStyle();
             HSSFDataFormat format = (HSSFDataFormat)workbook.CreateDataFormat();
             dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");
             //邊框
             dateStyle.BorderBottom = BorderStyle.Thin;
             dateStyle.BorderLeft = BorderStyle.Thin;
             dateStyle.BorderRight = BorderStyle.Thin;
             dateStyle.BorderTop = BorderStyle.Thin;

             //取得列寬
             int[] arrColWidth = new int[dtSource.Columns.Count];
             foreach (DataColumn item in dtSource.Columns)
             {
                 arrColWidth[item.Ordinal] = Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length;
             }
             for (int i = 0; i < dtSource.Rows.Count; i++)
             {
                 for (int j = 0; j < dtSource.Columns.Count; j++)
                 {
                     int intTemp = Encoding.GetEncoding(936).GetBytes(dtSource.Rows[i][j].ToString()).Length;
                     if (intTemp > arrColWidth[j])
                     {
                         arrColWidth[j] = intTemp;
                     }
                 }
             } 
             int rowIndex = 0; 
             foreach (DataRow row in dtSource.Rows)
             {
                 #region 新建表,填充表頭,填充列頭,樣式
                 if (rowIndex == 65535 || rowIndex == 0)
                 {
                     if (rowIndex != 0)
                     {
                         sheet = (HSSFSheet)workbook.CreateSheet();
                     }
 
                     #region 表頭及樣式
                     {
                         HSSFRow headerRow = (HSSFRow)sheet.CreateRow(0);
                         headerRow.HeightInPoints = 25;
                         headerRow.CreateCell(0).SetCellValue(strHeaderText);

                         HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle();
                         headStyle.Alignment = HorizontalAlignment.Center;


                         HSSFFont font = (HSSFFont)workbook.CreateFont();
                         font.FontHeightInPoints = 20;
                         font.Boldweight = 700;
                         headStyle.SetFont(font);
                         headerRow.GetCell(0).CellStyle = headStyle;
                         sheet.AddMergedRegion(new Region(0, 0, 0, dtSource.Columns.Count - 1));
                                               
                     }
                     #endregion
 
 
                     #region 列頭及樣式
                     {
                         HSSFRow headerRow = (HSSFRow)sheet.CreateRow(1); 
                         HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle();
                         headStyle.Alignment = HorizontalAlignment.Center;

                         //邊框
                         headStyle.BorderBottom = BorderStyle.Thin;
                         headStyle.BorderLeft = BorderStyle.Thin;
                         headStyle.BorderRight = BorderStyle.Thin;
                         headStyle.BorderTop = BorderStyle.Thin;

                         HSSFFont font = (HSSFFont)workbook.CreateFont();
                         font.FontHeightInPoints = 10;
                         font.Boldweight = 700;
                         headStyle.SetFont(font); 
                         foreach (DataColumn column in dtSource.Columns)
                         {
                             headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
                             headerRow.GetCell(column.Ordinal).CellStyle = headStyle;
 
                             //設置列寬
                             sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256); 
                         }
                        // headerRow.Dispose();
                     }
                     #endregion
 
                     rowIndex = 2;
                 }
                 #endregion
 
 
                 #region 填充內容
                 HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);

                 #region 邊框,樣式

                 HSSFCellStyle NewCellStyle = (HSSFCellStyle)workbook.CreateCellStyle();
                 NewCellStyle.Alignment = HorizontalAlignment.Center;

                 //邊框
                 NewCellStyle.BorderBottom = BorderStyle.Thin;
                 NewCellStyle.BorderLeft = BorderStyle.Thin;
                 NewCellStyle.BorderRight = BorderStyle.Thin;
                 NewCellStyle.BorderTop = BorderStyle.Thin;
                 #endregion

                 foreach (DataColumn column in dtSource.Columns)
                 {
                     HSSFCell newCell =(HSSFCell) dataRow.CreateCell(column.Ordinal);

                    
                     string drValue = row[column].ToString();
 
                     switch (column.DataType.ToString())
                     {
                         case "System.String"://字符串類型
                             newCell.SetCellValue(drValue);
                             newCell.CellStyle = NewCellStyle;
                             break;
                         case "System.DateTime"://日期類型
                            System.DateTime dateV;
                            System.DateTime.TryParse(drValue, out dateV);
                             newCell.SetCellValue(dateV);
 
                             newCell.CellStyle = dateStyle;//格式化顯示
                             break;
                         case "System.Boolean"://布爾型
                             bool boolV = false;
                             bool.TryParse(drValue, out boolV);
                             newCell.SetCellValue(boolV);
                             newCell.CellStyle = NewCellStyle;
                             break;
                         case "System.Int16"://整型
                         case "System.Int32":
                         case "System.Int64":
                         case "System.Byte":
                             int intV = 0;
                             int.TryParse(drValue, out intV);
                             newCell.SetCellValue(intV);
                             newCell.CellStyle = NewCellStyle;
                             break;
                         case "System.Decimal"://浮點型
                         case "System.Double":
                             double doubV = 0;
                             double.TryParse(drValue, out doubV);
                             newCell.SetCellValue(doubV);
                             newCell.CellStyle = NewCellStyle;
                             break;
                         case "System.DBNull"://空值處理
                             newCell.SetCellValue("");
                             newCell.CellStyle = NewCellStyle;
                             break;
                         default:
                             newCell.SetCellValue("");
                             newCell.CellStyle = NewCellStyle;
                             break;
                     }
 
                 }
                 #endregion
 
                 rowIndex++;
             } 
             using (MemoryStream ms = new MemoryStream())
             {
                 workbook.Write(ms);
                 ms.Flush();
                 ms.Position = 0;                                 
                 return ms;
             } 
         }
    }

 

 后面調用這個類,如下:

string dir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);//取得當前桌面路徑

 NPOIHelper.DataTableToExcel(dt,"文檔測試",dir+@"\測試.xls");

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM