using System.IO; using System.Data; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.HSSF.Util; using NPOI.XSSF.UserModel; using System; using UAS_LabelMachine.Entity; using UAS_LabelMachine.PublicMethod; namespace UAS_LabelMachine { class ExcelHandler { DataHelper dh = SystemInf.dh; /// <summary> /// 导出Excel,返回文件在客户端的路径 /// </summary> public string ExportExcel(DataTable firstsdt, DataTable dt, string FolderPath, string FileName, string Type, int PageSize, bool PrintWID) { //创建一个内存流,用来接收转换成Excel的内容 MemoryStream ms; ms = DataTableToExcel1(firstsdt, dt, Type, PageSize, PrintWID); //以系统当前时间命名文件,FileMode.Create表示创建文件,FileAccess.Write表示拥有写的权限 string filePath = @FolderPath + "\\" + FileName + ".xls"; FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); byte[] data = ms.ToArray(); fs.Write(data, 0, data.Length); fs.Flush(); //释放当前Excel文件,否则打开文件的时候会显示文件被占用 ms.Dispose(); fs.Dispose(); return filePath; } /// <summary> /// 导入Excel /// </summary> public void ImportExcel(DataTable DataTable, string TableName) { int columnNum = DataTable.Columns.Count; int rowNum = DataTable.Columns.Count; string[] field = new string[columnNum]; for (int i = 0; i < columnNum; i++) { field[i] = DataTable.Rows[0][i].ToString(); } } public static DataTable ExcelToDataTable(string filePath, bool isColumnName) { DataTable dataTable = null; FileStream fs = null; DataColumn column = null; DataRow dataRow = null; IWorkbook workbook = null; ISheet sheet = null; IRow row = null; ICell cell = null; int startRow = 0; try { using (fs = File.OpenRead(filePath)) { // 2007版本 if (filePath.IndexOf(".xlsx") > 0) { workbook = new XSSFWorkbook(fs); } // 2003版本 else if (filePath.IndexOf(".xls") > 0) { workbook = new HSSFWorkbook(fs); } if (workbook != null) { sheet = workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheet dataTable = new DataTable(); if (sheet != null) { int rowCount = sheet.LastRowNum;//总行数 if (rowCount > 0) { IRow firstRow = sheet.GetRow(0);//第一行 int cellCount = firstRow.LastCellNum;//列数 //构建datatable的列 if (isColumnName) { startRow = 1;//如果第一行是列名,则从第二行开始读取 for (int i = firstRow.FirstCellNum; i < cellCount; ++i) { cell = firstRow.GetCell(i); if (cell != null) { if (cell.StringCellValue != null) { column = new DataColumn(cell.StringCellValue); dataTable.Columns.Add(column); } } } } else { for (int i = firstRow.FirstCellNum; i < cellCount; ++i) { column = new DataColumn("column" + (i + 1)); dataTable.Columns.Add(column); } } //填充行 for (int i = startRow; i <= rowCount; ++i) { row = sheet.GetRow(i); if (row == null) continue; dataRow = dataTable.NewRow(); for (int j = row.FirstCellNum; j < cellCount; ++j) { cell = row.GetCell(j); if (cell == null) { dataRow[j] = ""; } else { //CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,) switch (cell.CellType) { case CellType.Blank: dataRow[j] = ""; break; case CellType.Numeric: short format = cell.CellStyle.DataFormat; //对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理 if (format == 14 || format == 31 || format == 57 || format == 58) dataRow[j] = cell.DateCellValue; else dataRow[j] = cell.NumericCellValue; break; case CellType.String: dataRow[j] = cell.StringCellValue; break; } } } dataTable.Rows.Add(dataRow); } } } } } return dataTable; } catch (Exception) { if (fs != null) { fs.Close(); } return null; } } /// <summary> /// 将DataTable形式的数据转成Excel格式的,然后用字节流的形式写入文件 /// </summary> /// <param name="DataTable"></param> /// <returns></returns> public MemoryStream DataTableToExcel(DataTable DataTable) { //创建内存流 MemoryStream ms = new MemoryStream(); //创建一个Book,相当于一个Excel文件 HSSFWorkbook book = new HSSFWorkbook(); //Excel中的Sheet ISheet sheet = book.CreateSheet("sheet1"); //获取行数量和列数量 int rowNum = DataTable.Rows.Count; int columnNum = DataTable.Columns.Count; //设置列的宽度,根据首行的列的内容的长度来设置 for (int i = 0; i < columnNum; i++) { int dataLength; //如果内容比标题短则取标题长度 if (DataTable.Rows[0][i].ToString().Length < DataTable.Columns[i].ColumnName.Length) { dataLength = DataTable.Columns[i].ColumnName.Length; dataLength = dataLength * 300; } else { dataLength = DataTable.Rows[0][i].ToString().Length; dataLength = dataLength * 300; } sheet.SetColumnWidth(i, dataLength); } //首先画好第一行带颜色的,单独写出来,避免写在循环里面 IRow row = sheet.CreateRow(0); //冻结第一行 sheet.CreateFreezePane(0, 1, 0, 1); ICellStyle style = book.CreateCellStyle(); style.FillForegroundColor = HSSFColor.PaleBlue.Index; style.FillPattern = FillPattern.BigSpots; style.FillBackgroundColor = HSSFColor.LightGreen.Index; //设置边框 style.BorderBottom = BorderStyle.Thick; style.BorderLeft = BorderStyle.Thick; style.BorderRight = BorderStyle.Thick; style.BorderTop = BorderStyle.Thick; row.HeightInPoints = 20; //固定第一行 //row.RowStyle.IsLocked=true; //给第一行的标签赋值样式和值 for (int j = 0; j < columnNum; j++) { row.CreateCell(j); row.Cells[j].CellStyle = style; row.Cells[j].CellStyle.VerticalAlignment = VerticalAlignment.Center; row.Cells[j].CellStyle.Alignment = HorizontalAlignment.Center; row.Cells[j].SetCellValue(DataTable.Columns[j].ColumnName); } //将DataTable的值循环赋值给book,Aligment设置居中 //之前已经画了带颜色的第一行,所以从i=1开始画 for (int i = 0; i < rowNum; i++) { IRow row1 = sheet.CreateRow(i + 1); row1.HeightInPoints = 20; for (int j = 0; j < columnNum; j++) { row1.CreateCell(j); row1.Cells[j].SetCellValue(DataTable.Rows[i][j].ToString()); row1.GetCell(j).CellStyle.VerticalAlignment = VerticalAlignment.Center; } } //将book的内容写入内存流中返回 book.Write(ms); return ms; } /// <summary> /// 将DataTable形式的数据转成Excel格式的,然后用字节流的形式写入文件 /// </summary> /// <param name="DataTable"></param> /// <returns></returns> public MemoryStream DataTableToExcel1(DataTable FirstDT, DataTable DataTable, string Type, int PageSize, bool PrintWID) { //创建内存流 MemoryStream ms = new MemoryStream(); //创建一个Book,相当于一个Excel文件 HSSFWorkbook book = new HSSFWorkbook(); //Excel中的Sheet ISheet sheet = book.CreateSheet("分页"); //获取行数量和列数量 int rowNum = DataTable.Rows.Count; int columnNum = DataTable.Columns.Count; ICellStyle style = book.CreateCellStyle(); style.VerticalAlignment = VerticalAlignment.Center; style.Alignment = HorizontalAlignment.Left; ICellStyle styleborder = book.CreateCellStyle(); styleborder.BorderBottom = BorderStyle.Thick; styleborder.BorderTop = BorderStyle.Thick; styleborder.BorderLeft = BorderStyle.Thick; styleborder.BorderRight = BorderStyle.Thick; styleborder.VerticalAlignment = VerticalAlignment.Center; styleborder.Alignment = HorizontalAlignment.Left; //设置列的宽度,根据首行的列的内容的长度来设置 for (int i = 0; i < columnNum; i++) { if (DataTable.Columns[i].ColumnName.Contains("客户")) { DataTable.Columns[i].ColumnName = "客户"; } if (DataTable.Columns[i].ColumnName.Contains("出货单号")) { DataTable.Columns[i].ColumnName = "出货单号"; } if (DataTable.Columns[i].ColumnName.Contains("型号")) { DataTable.Columns[i].ColumnName = "型号"; } if (DataTable.Columns[i].ColumnName.Contains("销售日期")) { DataTable.Columns[i].ColumnName = "销售日期"; } if (DataTable.Columns[i].ColumnName.ToLower().Contains("rownum")) { DataTable.Columns[i].ColumnName = "序号"; } if (DataTable.Columns[i].ColumnName.ToLower().Contains("ch_code")) { DataTable.Columns[i].ColumnName = "芯片号"; } if (DataTable.Columns[i].ColumnName.ToLower().Contains("pib_lotno")) { DataTable.Columns[i].ColumnName = "LotNo"; } if (DataTable.Columns[i].ColumnName.ToLower().Contains("io_qty")) { DataTable.Columns[i].ColumnName = "数量"; } } //首先画好第一行带颜色的,单独写出来,避免写在循环里面 IRow row = sheet.CreateRow(0); //冻结第一行 sheet.CreateFreezePane(0, 1, 0, 1); //style.FillPattern = FillPattern.BigSpots; //style.FillBackgroundColor = HSSFColor.LightGreen.Index; //设置边框 //style.BorderBottom = BorderStyle.Thick; //style.BorderLeft = BorderStyle.Thick; //style.BorderRight = BorderStyle.Thick; //style.BorderTop = BorderStyle.Thick; row.HeightInPoints = 20; //固定第一行 //row.RowStyle.IsLocked=true; //给第一行的标签赋值样式和值 row.CreateCell(0); row.Cells[0].SetCellValue(" 深爱半导体有限公司芯片出货清单"); row.GetCell(0).CellStyle = style; //开始绘制的Index int PaintIndex = 1; int sumCount = 0; int totalCount = 0; switch (Type) { case "FixRow": BaseUtil.CleanDataTableData(FirstDT); //首页参数拼接 string First_OrderCode = ""; string First_Prspec = ""; string First_Batch = ""; string First_WID = ""; for (int i = 0; i < rowNum; i++) { IRow row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; row1.HeightInPoints = 20; //不包含的订单号 if (!First_OrderCode.Contains(DataTable.Rows[i]["pd_ordercode"].ToString())) { First_OrderCode += DataTable.Rows[i]["pd_ordercode"].ToString() + " "; } //不包含的物料型号 if (!First_Prspec.Contains(DataTable.Rows[i]["pr_spec"].ToString())) { First_Prspec += DataTable.Rows[i]["pr_spec"].ToString() + " "; } //不包含扩撒批号 if (!First_Batch.Contains(DataTable.Rows[i]["扩散批号"].ToString())) { First_Batch += DataTable.Rows[i]["扩散批号"].ToString() + " "; } //不包含Wafer_id if (!First_WID.Contains(DataTable.Rows[i]["Wafer_ID"].ToString())) { First_WID += DataTable.Rows[i]["Wafer_ID"].ToString() + " "; } if (i / PageSize >= 1 && i % PageSize == 0) { DataRow dr = FirstDT.NewRow(); dr["型号"] = DataTable.Rows[i]["型号"].ToString(); dr["出货单号"] = DataTable.Rows[i]["出货单号"].ToString(); dr["客户"] = DataTable.Rows[i]["客户"].ToString(); dr["销售日期"] = DataTable.Rows[i]["销售日期"].ToString(); dr["pd_ordercode"] = First_OrderCode; dr["pr_spec"] = First_Prspec; dr["ch_splitbatch"] = First_Batch; dr["ch_waterid"] = First_WID; dr["num"] = PageSize; dr["io_qty"] = sumCount; FirstDT.Rows.Add(dr); First_OrderCode = ""; First_Prspec = ""; First_Batch = ""; First_WID = ""; for (int j = 0; j < columnNum - 4; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue("小计"); } else if (j == 2) { row1.CreateCell(j); row1.Cells[j].SetCellValue(sumCount); } else { row1.CreateCell(j); } row1.Cells[j].CellStyle = styleborder; } sumCount = 0; row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; } //每次到了页数开始分页 if (i % PageSize == 0 || i == rowNum - 1) { //第一行添加客户信息 if (i != rowNum - 1) { for (int j = 0; j < columnNum - 3; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue(DataTable.Rows[i]["客户"].ToString()); } else if (j == columnNum - 4) { row1.CreateCell(j); row1.Cells[j].SetCellValue(DataTable.Rows[i]["出货单号"].ToString()); } else { row1.CreateCell(j); } row1.GetCell(j).CellStyle = style; } row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; //第二行添加型号 for (int j = 0; j < columnNum - 3; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue(DataTable.Rows[i]["型号"].ToString()); } else if (j == columnNum - 4) { row1.CreateCell(j); row1.Cells[j].SetCellValue(DataTable.Rows[i]["销售日期"].ToString()); } else { row1.CreateCell(j); } row1.GetCell(j).CellStyle = style; } //添加列名 row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; for (int j = 4; j < columnNum; j++) { row1.CreateCell(j - 4); row1.Cells[j - 4].CellStyle = styleborder; if (DataTable.Columns[j].ColumnName.ToLower() == "chw_percent1") { row1.Cells[j - 4].SetCellValue(DataTable.Rows[i]["chw_itemname1"].ToString()); } else if (DataTable.Columns[j].ColumnName.ToLower() == "chw_percent2") { row1.Cells[j - 4].SetCellValue(DataTable.Rows[i]["chw_itemname2"].ToString()); } else row1.Cells[j - 4].SetCellValue(DataTable.Columns[j].ColumnName); //如果chw_itemname1的值为空,则值为100和0,其中一列不显示,不显示 if (DataTable.Columns[j].ColumnName.ToLower().Contains("chw_itemname") || DataTable.Columns[j].ColumnName.ToLower().Contains("pr_spec") || DataTable.Columns[j].ColumnName.ToLower().Contains("pd_ordercode")) { sheet.SetColumnHidden(j - 4, true); } } row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; } } //添加数据内容 for (int j = 4; j < columnNum; j++) { string Data = DataTable.Rows[i][j].ToString(); row1.CreateCell(j - 4); row1.Cells[j - 4].SetCellValue(Data); row1.GetCell(j - 4).CellStyle = styleborder; if (DataTable.Columns[j].ColumnName == "数量") { sumCount += int.Parse(DataTable.Rows[i][j].ToString()); totalCount += int.Parse(DataTable.Rows[i][j].ToString()); } if (DataTable.Columns[j].ColumnName == "序号") { row1.Cells[j - 4].SetCellValue(i + 1); } } if (i == rowNum - 1) { DataRow dr = FirstDT.NewRow(); dr["型号"] = DataTable.Rows[i]["型号"].ToString(); dr["出货单号"] = DataTable.Rows[i]["出货单号"].ToString(); dr["客户"] = DataTable.Rows[i]["客户"].ToString(); dr["销售日期"] = DataTable.Rows[i]["销售日期"].ToString(); dr["pd_ordercode"] = First_OrderCode; dr["pr_spec"] = First_Prspec; dr["ch_splitbatch"] = First_Batch; dr["ch_waterid"] = First_WID; dr["num"] =(i% PageSize)+1; dr["io_qty"] = sumCount; FirstDT.Rows.Add(dr); row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; for (int j = 0; j < columnNum - 4; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue("小计"); } else if (j == 2) { row1.CreateCell(j); row1.Cells[j].SetCellValue(sumCount); } else { row1.CreateCell(j); } row1.Cells[j].CellStyle = styleborder; } row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; for (int j = 0; j < columnNum - 3; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue("备注"); } else if (j == 2) { row1.CreateCell(j); row1.Cells[j].SetCellValue(totalCount); } else if (j == columnNum - 5) { row1.CreateCell(j); row1.Cells[j].SetCellValue(rowNum); } else if (j == columnNum - 4) { row1.CreateCell(j); row1.Cells[j].SetCellValue("片"); } else { row1.CreateCell(j); } row1.Cells[j].CellStyle = style; } } } for (int i = 0; i < sheet.LastRowNum; i++) { if (i != 0) { sheet.AutoSizeColumn(i); sheet.SetColumnWidth(i, sheet.GetColumnWidth(i) + 1000); } } break; case "BatchCode": string LastBatchCode = ""; for (int i = 0; i < rowNum; i++) { IRow row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; row1.HeightInPoints = 20; //如果批号不相等的时候 if (LastBatchCode != "" && LastBatchCode != DataTable.Rows[i]["扩散批号"].ToString()) { for (int j = 0; j < columnNum - 4; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue("小计"); } else if (j == 2) { row1.CreateCell(j); row1.Cells[j].SetCellValue(sumCount); } else { row1.CreateCell(j); } row1.Cells[j].CellStyle = styleborder; } sumCount = 0; row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; } //每次到了页数开始分页 if (LastBatchCode == "" || (LastBatchCode != "" && LastBatchCode != DataTable.Rows[i]["扩散批号"].ToString()) || i == rowNum - 1) { LastBatchCode = DataTable.Rows[i]["扩散批号"].ToString(); //第一行添加客户信息 if (i != rowNum - 1) { for (int j = 0; j < columnNum - 3; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue(DataTable.Rows[i]["客户"].ToString()); } else if (j == columnNum - 4) { row1.CreateCell(j); row1.Cells[j].SetCellValue(DataTable.Rows[i]["出货单号"].ToString()); } else { row1.CreateCell(j); } row1.GetCell(j).CellStyle = style; } row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; //第二行添加型号 for (int j = 0; j < columnNum - 3; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue(DataTable.Rows[i]["型号"].ToString()); } else if (j == columnNum - 4) { row1.CreateCell(j); row1.Cells[j].SetCellValue(DataTable.Rows[i]["销售日期"].ToString()); } else { row1.CreateCell(j); } row1.GetCell(j).CellStyle = style; } //添加列名 row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; for (int j = 4; j < columnNum; j++) { row1.CreateCell(j - 4); row1.Cells[j - 4].CellStyle = styleborder; if (DataTable.Columns[j].ColumnName.ToLower() == "chw_percent1") { row1.Cells[j - 4].SetCellValue(DataTable.Rows[i]["chw_itemname1"].ToString()); } else if (DataTable.Columns[j].ColumnName.ToLower() == "chw_percent2") { row1.Cells[j - 4].SetCellValue(DataTable.Rows[i]["chw_itemname2"].ToString()); } else row1.Cells[j - 4].SetCellValue(DataTable.Columns[j].ColumnName); if (DataTable.Columns[j].ColumnName.ToLower().Contains("chw_itemname") || DataTable.Columns[j].ColumnName.ToLower().Contains("pr_spec") || DataTable.Columns[j].ColumnName.ToLower().Contains("pd_ordercode")) { sheet.SetColumnHidden(j - 4, true); } } row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; } } //添加数据内容 for (int j = 4; j < columnNum; j++) { string Data = DataTable.Rows[i][j].ToString(); row1.CreateCell(j - 4); row1.Cells[j - 4].SetCellValue(Data); row1.GetCell(j - 4).CellStyle = styleborder; if (DataTable.Columns[j].ColumnName == "数量") { sumCount += int.Parse(DataTable.Rows[i][j].ToString()); totalCount += int.Parse(DataTable.Rows[i][j].ToString()); } if (DataTable.Columns[j].ColumnName == "序号") { row1.Cells[j - 4].SetCellValue(i + 1); } } if (i == rowNum - 1) { row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; for (int j = 0; j < columnNum - 4; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue("小计"); } else if (j == 2) { row1.CreateCell(j); row1.Cells[j].SetCellValue(sumCount); } else { row1.CreateCell(j); } row1.Cells[j].CellStyle = styleborder; } row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; for (int j = 0; j < columnNum - 3; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue("备注"); } else if (j == 2) { row1.CreateCell(j); row1.Cells[j].SetCellValue(totalCount); } else if (j == columnNum - 5) { row1.CreateCell(j); row1.Cells[j].SetCellValue(rowNum); } else if (j == columnNum - 4) { row1.CreateCell(j); row1.Cells[j].SetCellValue("片"); } else { row1.CreateCell(j); } row1.Cells[j].CellStyle = style; } } } for (int i = 0; i < sheet.LastRowNum; i++) { if (i != 0) { sheet.AutoSizeColumn(i); sheet.SetColumnWidth(i, sheet.GetColumnWidth(i) + 1000); } } break; case "BoxCode": string LastBoxCode = ""; for (int i = 0; i < rowNum; i++) { IRow row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; row1.HeightInPoints = 20; //如果批号不相等的时候 if (LastBoxCode != "" && LastBoxCode != DataTable.Rows[i]["盒号"].ToString()) { for (int j = 0; j < columnNum - 4; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue("小计"); } else if (j == 2) { row1.CreateCell(j); row1.Cells[j].SetCellValue(sumCount); } else { row1.CreateCell(j); } row1.Cells[j].CellStyle = styleborder; } sumCount = 0; row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; } //每次到了页数开始分页 if (LastBoxCode == "" || (LastBoxCode != "" && LastBoxCode != DataTable.Rows[i]["盒号"].ToString()) || i == rowNum - 1) { LastBoxCode = DataTable.Rows[i]["盒号"].ToString(); //第一行添加客户信息 if (i != rowNum - 1) { for (int j = 0; j < columnNum - 3; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue(DataTable.Rows[i]["客户"].ToString()); } else if (j == columnNum - 4) { row1.CreateCell(j); row1.Cells[j].SetCellValue(DataTable.Rows[i]["出货单号"].ToString()); } else { row1.CreateCell(j); } row1.GetCell(j).CellStyle = style; } row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; //第二行添加型号 for (int j = 0; j < columnNum - 3; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue(DataTable.Rows[i]["型号"].ToString()); } else if (j == columnNum - 4) { row1.CreateCell(j); row1.Cells[j].SetCellValue(DataTable.Rows[i]["销售日期"].ToString()); } else { row1.CreateCell(j); } row1.GetCell(j).CellStyle = style; } //添加列名 row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; for (int j = 4; j < columnNum; j++) { row1.CreateCell(j - 4); row1.Cells[j - 4].CellStyle = styleborder; if (DataTable.Columns[j].ColumnName.ToLower() == "chw_percent1") { row1.Cells[j - 4].SetCellValue(DataTable.Rows[i]["chw_itemname1"].ToString()); } else if (DataTable.Columns[j].ColumnName.ToLower() == "chw_percent2") { row1.Cells[j - 4].SetCellValue(DataTable.Rows[i]["chw_itemname2"].ToString()); } else row1.Cells[j - 4].SetCellValue(DataTable.Columns[j].ColumnName); if (DataTable.Columns[j].ColumnName.ToLower().Contains("chw_itemname") || DataTable.Columns[j].ColumnName.ToLower().Contains("pr_spec") || DataTable.Columns[j].ColumnName.ToLower().Contains("pd_ordercode")) { sheet.SetColumnHidden(j - 4, true); } } row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; } } //添加数据内容 for (int j = 4; j < columnNum; j++) { string Data = DataTable.Rows[i][j].ToString(); row1.CreateCell(j - 4); row1.Cells[j - 4].SetCellValue(Data); row1.GetCell(j - 4).CellStyle = styleborder; if (DataTable.Columns[j].ColumnName == "数量") { sumCount += int.Parse(DataTable.Rows[i][j].ToString()); totalCount += int.Parse(DataTable.Rows[i][j].ToString()); } if (DataTable.Columns[j].ColumnName == "序号") { row1.Cells[j - 4].SetCellValue(i + 1); } } if (i == rowNum - 1) { row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; for (int j = 0; j < columnNum - 4; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue("小计"); } else if (j == 2) { row1.CreateCell(j); row1.Cells[j].SetCellValue(sumCount); } else { row1.CreateCell(j); } row1.Cells[j].CellStyle = styleborder; } row1 = sheet.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; for (int j = 0; j < columnNum - 3; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue("备注"); } else if (j == 2) { row1.CreateCell(j); row1.Cells[j].SetCellValue(totalCount); } else if (j == columnNum - 5) { row1.CreateCell(j); row1.Cells[j].SetCellValue(rowNum); } else if (j == columnNum - 4) { row1.CreateCell(j); row1.Cells[j].SetCellValue("片"); } else { row1.CreateCell(j); } row1.Cells[j].CellStyle = style; } } } for (int i = 0; i < sheet.LastRowNum; i++) { if (i != 0) { sheet.AutoSizeColumn(i); sheet.SetColumnWidth(i, sheet.GetColumnWidth(i) + 1000); } } break; default: break; } //填充首页 sumCount = 0; totalCount = 0; PaintIndex = 1; ISheet sheet2 = book.CreateSheet("首页"); row = sheet2.CreateRow(0); row.CreateCell(0); row.Cells[0].SetCellValue(" 深爱半导体有限公司芯片出货清单"); row.GetCell(0).CellStyle = style; rowNum = FirstDT.Rows.Count; columnNum = FirstDT.Columns.Count; for (int i = 0; i < columnNum; i++) { if (FirstDT.Columns[i].ColumnName.ToLower().Contains("pd_ordercode")) { FirstDT.Columns[i].ColumnName = "订单号"; } if (FirstDT.Columns[i].ColumnName.ToLower().Contains("pr_spec")) { FirstDT.Columns[i].ColumnName = "产品型号"; } if (FirstDT.Columns[i].ColumnName.ToLower().Contains("ch_splitbatch")) { FirstDT.Columns[i].ColumnName = "批号"; } if (FirstDT.Columns[i].ColumnName.ToLower().Contains("ch_waterid")) { FirstDT.Columns[i].ColumnName = "片号"; } if (FirstDT.Columns[i].ColumnName.ToLower().Contains("num")) { FirstDT.Columns[i].ColumnName = "片数"; } if (FirstDT.Columns[i].ColumnName.ToLower().Contains("io_qty")) { FirstDT.Columns[i].ColumnName = "管芯数"; } } for (int i = 0; i < rowNum; i++) { IRow row1 = sheet2.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; row1.HeightInPoints = 20; //只需要绘制一行 if (i == 0) { for (int j = 0; j < columnNum - 3; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue(FirstDT.Rows[i]["客户"].ToString()); } else if (j == columnNum - 4) { row1.CreateCell(j); row1.Cells[j].SetCellValue(FirstDT.Rows[i]["出货单号"].ToString()); } else { row1.CreateCell(j); } row1.GetCell(j).CellStyle = style; } row1 = sheet2.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; //第二行添加型号 for (int j = 0; j < columnNum - 3; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].SetCellValue(FirstDT.Rows[i]["型号"].ToString()); } else if (j == columnNum - 4) { row1.CreateCell(j); row1.Cells[j].SetCellValue(FirstDT.Rows[i]["销售日期"].ToString()); } else { row1.CreateCell(j); } row1.GetCell(j).CellStyle = style; } row1 = sheet2.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; //添加列名 for (int j = 4; j < columnNum; j++) { row1.CreateCell(j - 4); row1.Cells[j - 4].CellStyle = styleborder; row1.Cells[j - 4].SetCellValue(FirstDT.Columns[j].ColumnName); } row1 = sheet2.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; } //添加数据内容 for (int j = 4; j < columnNum; j++) { string Data = FirstDT.Rows[i][j].ToString(); row1.CreateCell(j - 4); row1.Cells[j - 4].SetCellValue(Data); row1.GetCell(j - 4).CellStyle = styleborder; if (FirstDT.Columns[j].ColumnName == "片数") { sumCount += int.Parse(Data); } if (FirstDT.Columns[j].ColumnName == "管芯数") { totalCount += int.Parse(Data); } } //添加总计行 if (i == rowNum - 1) { row1 = sheet2.CreateRow(PaintIndex); PaintIndex = PaintIndex + 1; for (int j = 0; j < columnNum - 4; j++) { if (j == 0) { row1.CreateCell(j); row1.Cells[j].CellStyle = styleborder; row1.Cells[j].SetCellValue("总计"); } else if (j == columnNum - 6) { row1.CreateCell(j); row1.Cells[j].CellStyle = styleborder; row1.Cells[j].SetCellValue(sumCount); } else if (j == columnNum - 5) { row1.CreateCell(j); row1.Cells[j].CellStyle = styleborder; row1.Cells[j].SetCellValue(totalCount); } else { row1.CreateCell(j); row1.Cells[j].CellStyle = styleborder; } } } } for (int i = 0; i < sheet2.LastRowNum; i++) { if (i != 0) { sheet2.AutoSizeColumn(i); sheet2.SetColumnWidth(i, sheet2.GetColumnWidth(i) + 1000); } } //将book的内容写入内存流中返回 book.Write(ms); return ms; } } }