咔片PPT · AI自动生成演示文稿,模板丰富、排版精美 讯飞智文 · 一键生成PPT和Word,高效应对学习与办公

关注我,为您分享C#技术实现

public static MemoryStream DataTableToExcel(DataTable dtSource, string strHeaderText)

{

HSSFWorkbook workbook = new HSSFWorkbook();

HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet();

HSSFCellStyle cellstyle = (HSSFCellStyle)workbook.CreateCellStyle();//设置垂直居中格式

cellstyle.WrapText = true;//自动换行

cellstyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;//单元格垂直对齐方式居中

cellstyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;////单元格水平对齐方式居中

#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");

//取得列宽

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 表头及样式

{

HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle();

headStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//居中

HSSFFont font = (HSSFFont)workbook.CreateFont();

font.FontHeightInPoints = 20;

font.Boldweight = 700;

headStyle.SetFont(font);

//headerRow.GetCell(0).CellStyle = headStyle;

//sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, dtSource.Columns.Count - 1));

////合并单元格(标题头)

//sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(2, dtSource.Rows.Count + 1, 0, 0));

////合并单元格(datatable的第一栏)

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 8, 42));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(1, 1, 8, 23));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(1, 1, 24, 41));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(2, 2, 8, 10));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(2, 2, 11, 15));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(2, 2, 16, 17));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(2, 2, 18, 20));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(2, 2, 24, 26));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(2, 2, 27, 30));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(2, 2, 31, 33));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(2, 2, 34, 37));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(2, 2, 38, 40));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 4, 0, 0));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 4, 1, 1));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 4, 2, 2));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 4, 3, 3));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 4, 4, 4));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 4, 5, 5));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 4, 6, 6));

sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 3, 7, 7));

//sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(4, 4, 7, 7));

//合并单元格(datatable的第一栏)

cellstyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; //下边框线

cellstyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; //左边框线

cellstyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; //右边框线

cellstyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;

}

#endregion

#region 列头及样式

{

HSSFRow headerRow = (HSSFRow)sheet.CreateRow(1);

HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle();

//headStyle.Alignment = CellHorizontalAlignment.CENTER;

HSSFFont font = (HSSFFont)workbook.CreateFont();

font.FontHeightInPoints = 10;

headStyle.SetFont(font);

headStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//居中

//设置列宽

sheet.SetColumnWidth(0, 24 * 120);

sheet.SetColumnWidth(1, 24 * 200);

sheet.SetColumnWidth(2, 24 * 240);

sheet.SetColumnWidth(3, 24 * 480);

sheet.SetColumnWidth(5, 24 * 480);

sheet.SetColumnWidth(8, 24 * 480);

sheet.SetColumnWidth(9, 24 * 480);

sheet.SetColumnWidth(10, 24 * 480);

sheet.SetColumnWidth(11, 24 * 480);

sheet.SetColumnWidth(12, 24 * 480);

sheet.SetColumnWidth(13, 24 * 480);

sheet.SetColumnWidth(14, 24 * 480);

sheet.SetColumnWidth(15, 24 * 480);

sheet.SetColumnWidth(16, 24 * 480);

sheet.SetColumnWidth(17, 24 * 480);

sheet.SetColumnWidth(18, 24 * 480);

sheet.SetColumnWidth(19, 24 * 480);

sheet.SetColumnWidth(20, 24 * 480);

sheet.SetColumnWidth(21, 24 * 480);

sheet.SetColumnWidth(22, 24 * 480);

sheet.SetColumnWidth(23, 24 * 480);

sheet.SetColumnWidth(24, 24 * 480);

sheet.SetColumnWidth(25, 24 * 480);

sheet.SetColumnWidth(26, 24 * 480);

sheet.SetColumnWidth(27, 24 * 480);

sheet.SetColumnWidth(28, 24 * 480);

sheet.SetColumnWidth(29, 24 * 480);

sheet.SetColumnWidth(30, 24 * 480);

sheet.SetColumnWidth(31, 24 * 480);

sheet.SetColumnWidth(32, 24 * 480);

sheet.SetColumnWidth(33, 24 * 480);

sheet.SetColumnWidth(34, 24 * 480);

sheet.SetColumnWidth(35, 24 * 480);

sheet.SetColumnWidth(36, 24 * 480);

sheet.SetColumnWidth(37, 24 * 480);

sheet.SetColumnWidth(38, 24 * 480);

sheet.SetColumnWidth(39, 24 * 160);

sheet.SetColumnWidth(40, 24 * 160);

sheet.SetColumnWidth(41, 24 * 160);

sheet.SetColumnWidth(42, 24 * 160);

sheet.SetColumnWidth(43, 24 * 160);

sheet.SetColumnWidth(44, 24 * 160);

sheet.SetColumnWidth(45, 24 * 160);

sheet.SetColumnWidth(46, 24 * 500);

// headerRow.Dispose();

}

#endregion

rowIndex = 0;

}

#endregion

#region 填充内容

HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);

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"://字符串类型

if (drValue.Contains("backcoler=read"))

{

HSSFCellStyle style = (HSSFCellStyle)workbook.CreateCellStyle();

style.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.LightYellow.Index;

//cellstyle.FillBackgroundColor = HSSFColor.DarkRed.Index;

////很重要背景色缺一行就不好使

style.WrapText = true;//自动换行

style.FillPattern = FillPattern.SolidForeground;

newCell.CellStyle = style;

newCell.SetCellValue(drValue.Replace("backcoler=read",""));

}

else if(drValue.Contains("OK"))

{

HSSFCellStyle style = (HSSFCellStyle)workbook.CreateCellStyle();

style.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.LightGreen.Index;

//cellstyle.FillBackgroundColor = HSSFColor.DarkRed.Index;

////很重要背景色缺一行就不好使

style.FillPattern = FillPattern.SolidForeground;

style.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; //下边框线

style.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; //左边框线

style.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; //右边框线

style.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;

newCell.CellStyle = style;

newCell.SetCellValue(drValue);

}

else

{

newCell.CellStyle = cellstyle;

newCell.SetCellValue(drValue);

}


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.CellStyle = cellstyle;

newCell.SetCellValue(boolV);

break;

case "System.Int16"://整型

case "System.Int32":

case "System.Int64":

case "System.Byte":

int intV = 0;

int.TryParse(drValue, out intV);

newCell.CellStyle = cellstyle;

newCell.SetCellValue(intV);

break;

case "System.Decimal"://浮点型

case "System.Double":

double doubV = 0;

double.TryParse(drValue, out doubV);

newCell.CellStyle = cellstyle;

newCell.SetCellValue(doubV);

break;

case "System.DBNull"://空值处理

newCell.CellStyle = cellstyle;

newCell.SetCellValue("");

break;

default:

newCell.CellStyle = cellstyle;

newCell.SetCellValue("");

break;

}

}

#endregion

rowIndex++;

}

using (MemoryStream ms = new MemoryStream())

{

workbook.Write(ms);

ms.Flush();

ms.Position = 0;

return ms;

}

}