using System;
using System.Data;
using System.IO;
using System.Text;
using System.Web;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
using CallCenterApi.DB;
using System.Collections.Generic;
namespace CallCenter.Utility
{
public class NPOIHelper
{
private string _title;
private string _sheetName;
private string _filePath;
///
/// 导出到Excel
///
///
///
public bool ToExcel(DataTable table, string[] columns = null)
{
FileStream fs = new FileStream(this._filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
IWorkbook workBook = new HSSFWorkbook();
if (string.IsNullOrWhiteSpace(this._sheetName))
{
this._sheetName = "sheet1";
}
ISheet sheet = workBook.CreateSheet(this._sheetName);
//处理表格标题
IRow row = sheet.CreateRow(0);
row.CreateCell(0).SetCellValue(this._title);
sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, table.Columns.Count - 1));
row.Height = 500;
ICellStyle cellStyle = workBook.CreateCellStyle();
IFont font = workBook.CreateFont();
font.FontName = "微软雅黑";
font.FontHeightInPoints = 17;
cellStyle.SetFont(font);
cellStyle.VerticalAlignment = VerticalAlignment.Center;
cellStyle.Alignment = HorizontalAlignment.Center;
row.Cells[0].CellStyle = cellStyle;
//处理表格列头
row = sheet.CreateRow(1);
if (columns == null)
{
for (int i = 0; i < table.Columns.Count; i++)
{
row.CreateCell(i).SetCellValue(table.Columns[i].ColumnName);
row.Height = 350;
sheet.AutoSizeColumn(i);
}
}
else
{
for (int i = 0; i < columns.Length; i++)
{
row.CreateCell(i).SetCellValue(columns[i]);
row.Height = 350;
sheet.AutoSizeColumn(i);
}
}
//处理数据内容
for (int i = 0; i < table.Rows.Count; i++)
{
row = sheet.CreateRow(2 + i);
row.Height = 250;
for (int j = 0; j < table.Columns.Count; j++)
{
row.CreateCell(j).SetCellValue(table.Rows[i][j].ToString());
sheet.SetColumnWidth(j, 256 * 15);
}
}
//写入数据流
workBook.Write(fs);
fs.Flush();
fs.Close();
return true;
}
///
/// 导出到Excel
///
///
///
/// 空字符串或null的话默认sheet1
/// 自定义表格列头,默认null
///
public bool ToExcel(DataTable table, string title, string sheetName, string filePath, string[] columns = null)
{
this._title = title;
this._sheetName = sheetName;
this._filePath = filePath;
return ToExcel(table, columns);
}
///
/// 弹出下载框导出excel
///
///
///
///
public string ExportToExcel(string Name, DataTable dt, string[] cols = null)
{
try
{
//if (dt.Rows.Count > 0)
//{
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("Sheet1");
ICellStyle HeadercellStyle = workbook.CreateCellStyle();
HeadercellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
HeadercellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
HeadercellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
HeadercellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
HeadercellStyle.Alignment = HorizontalAlignment.Center;
HeadercellStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.SkyBlue.Index;
HeadercellStyle.FillPattern = FillPattern.SolidForeground;
HeadercellStyle.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.SkyBlue.Index;
//字体
NPOI.SS.UserModel.IFont headerfont = workbook.CreateFont();
headerfont.Boldweight = (short)FontBoldWeight.Bold;
headerfont.FontHeightInPoints = 12;
HeadercellStyle.SetFont(headerfont);
//用column name 作为列名
int icolIndex = 0;
IRow headerRow = sheet.CreateRow(0);
if (cols == null || (cols != null && cols.Length == 0))
{
foreach (DataColumn dc in dt.Columns)
{
ICell cell = headerRow.CreateCell(icolIndex);
cell.SetCellValue(dc.ColumnName);
cell.CellStyle = HeadercellStyle;
icolIndex++;
}
}
else
{
foreach (string dc in cols)
{
ICell cell = headerRow.CreateCell(icolIndex);
cell.SetCellValue(dc);
cell.CellStyle = HeadercellStyle;
icolIndex++;
}
}
ICellStyle cellStyle = workbook.CreateCellStyle();
//为避免日期格式被Excel自动替换,所以设定 format 为 『@』 表示一率当成text來看
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("@");
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;
NPOI.SS.UserModel.IFont cellfont = workbook.CreateFont();
cellfont.Boldweight = (short)FontBoldWeight.Normal;
cellStyle.SetFont(cellfont);
//建立内容行
int iRowIndex = 0;
foreach (DataRow dr in dt.Rows)
{
int iCellIndex = 0;
IRow irow = sheet.CreateRow(iRowIndex + 1);
for (int i = 0; i < dt.Columns.Count; i++)
{
string strsj = string.Empty;
if (dr[i] != null)
{
strsj = dr[i].ToString();
}
ICell cell = irow.CreateCell(iCellIndex);
cell.SetCellValue(strsj);
cell.CellStyle = cellStyle;
iCellIndex++;
}
iRowIndex++;
}
//自适应列宽度
for (int i = 0; i < icolIndex; i++)
{
sheet.AutoSizeColumn(i);
}
using (MemoryStream ms = new MemoryStream())
{
workbook.Write(ms);
HttpContext curContext = HttpContext.Current;
// 设置编码和附件格式
curContext.Response.ContentType = "application/vnd.ms-excel";
curContext.Response.ContentEncoding = Encoding.UTF8;
curContext.Response.Charset = "";
curContext.Response.AppendHeader("Content-Disposition",
"attachment;filename=" + HttpUtility.UrlEncode(Name + ".xls", Encoding.UTF8));
curContext.Response.BinaryWrite(ms.GetBuffer());
workbook = null;
ms.Close();
ms.Dispose();
curContext.Response.End();
}
//}
return "";
}
catch
{
return "导出失败!";
}
}
///
/// 合并单元格
///
/// 要合并单元格所在的sheet
/// 开始行的索引
/// 结束行的索引
/// 开始列的索引
/// 结束列的索引
public static void SetCellRangeAddress(ISheet sheet, int rowstart, int rowend, int colstart, int colend)
{
CellRangeAddress cellRangeAddress = new CellRangeAddress(rowstart, rowend, colstart, colend);
sheet.AddMergedRegion(cellRangeAddress);
}
///
/// 工单类型弹出下载框导出excel
///
///
///
/// 仪器或试剂
///
public string ExportToExcelForGDLX(string Name, DataTable dt, string typeclass, List colnames, List erows, List secolnames)
{
try
{
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("Sheet1");
ICellStyle HeadercellStyle = workbook.CreateCellStyle();
HeadercellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
HeadercellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
HeadercellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
HeadercellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
HeadercellStyle.Alignment = HorizontalAlignment.Center;
HeadercellStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.SkyBlue.Index;
HeadercellStyle.FillPattern = FillPattern.SolidForeground;
HeadercellStyle.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.SkyBlue.Index;
//字体
NPOI.SS.UserModel.IFont headerfont = workbook.CreateFont();
headerfont.Boldweight = (short)FontBoldWeight.Bold;
headerfont.FontHeightInPoints = 12;
HeadercellStyle.SetFont(headerfont);
//用column name 作为列名
int icolIndex = 0;
IRow headerRow = sheet.CreateRow(0);
for (int i = 0; i < colnames.Count; i++)
{
ICell cell = headerRow.CreateCell(i);
cell.SetCellValue(colnames[i]);
cell.CellStyle = HeadercellStyle;
//SetCellRangeAddress(sheet, 0, 0, erows[i * 2], erows[i * 2 + 1]);
}
for (int k = 0; k < erows.Count / 2; k++)
{
SetCellRangeAddress(sheet, 0, 0, erows[k * 2], erows[k * 2 + 1]);
}
//添加第二行标题
IRow SecRow = sheet.CreateRow(1);
for (int i = 0; i < secolnames.Count; i++)
{
ICell cell = SecRow.CreateCell(i);
cell.SetCellValue(secolnames[i].ToString());
}
ICellStyle cellStyle = workbook.CreateCellStyle();
//为避免日期格式被Excel自动替换,所以设定 format 为 『@』 表示一率当成text來看
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("@");
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;
NPOI.SS.UserModel.IFont cellfont = workbook.CreateFont();
cellfont.Boldweight = (short)FontBoldWeight.Normal;
cellStyle.SetFont(cellfont);
//建立内容行
int iRowIndex = 0;
foreach (DataRow dr in dt.Rows)
{
int iCellIndex = 0;
IRow irow = sheet.CreateRow(iRowIndex + 2);
for (int i = 0; i < dt.Columns.Count; i++)
{
string strsj = string.Empty;
if (dr[i] != null)
{
strsj = dr[i].ToString();
}
ICell cell = irow.CreateCell(iCellIndex);
cell.SetCellValue(strsj);
cell.CellStyle = cellStyle;
iCellIndex++;
}
iRowIndex++;
}
//自适应列宽度
for (int i = 0; i < icolIndex; i++)
{
sheet.AutoSizeColumn(i);
}
using (MemoryStream ms = new MemoryStream())
{
workbook.Write(ms);
HttpContext curContext = HttpContext.Current;
// 设置编码和附件格式
curContext.Response.ContentType = "application/vnd.ms-excel";
curContext.Response.ContentEncoding = Encoding.UTF8;
curContext.Response.Charset = "";
curContext.Response.AppendHeader("Content-Disposition",
"attachment;filename=" + HttpUtility.UrlEncode(Name + ".xls", Encoding.UTF8));
curContext.Response.BinaryWrite(ms.GetBuffer());
workbook = null;
ms.Close();
ms.Dispose();
curContext.Response.End();
}
return "";
}
catch (Exception e)
{
return "导出失败!" + e.Message;
}
}
///
/// 导入excel转换为datatable
///
///
///
///
public DataTable ExcelToTable(HttpPostedFile upfile, int headrow)
{
DataTable dt = new DataTable();
IWorkbook workbook = null;
Stream stream = upfile.InputStream;
string suffix = upfile.FileName.Substring(upfile.FileName.LastIndexOf(".") + 1).ToLower();
if (suffix == "xlsx") // 2007版本
{
workbook = new XSSFWorkbook(stream);
}
else if (suffix == "xls") // 2003版本
{
workbook = new HSSFWorkbook(stream);
}
//获取excel的第一个sheet
ISheet sheet = workbook.GetSheetAt(0);
//获取sheet的第一行
IRow headerRow = sheet.GetRow(headrow);
//一行最后一个方格的编号 即总的列数
int cellCount = headerRow.LastCellNum;
//最后一列的标号 即总的行数
int rowCount = sheet.LastRowNum;
//列名
for (int i = 0; i < cellCount; i++)
{
dt.Columns.Add(headerRow.GetCell(i).ToString());
}
for (int i = (sheet.FirstRowNum + headrow + 1); i <= sheet.LastRowNum; i++)
{
DataRow dr = dt.NewRow();
IRow row = sheet.GetRow(i);
for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
{
dr[j] = row.GetCell(j).ToString();
}
}
dt.Rows.Add(dr);
}
sheet = null;
workbook = null;
return dt;
}
///
/// 导入excel转换为datatable
///
///
///
///
public DataTable ExcelToTable(string fileName, int headrow)
{
DataTable dt = new DataTable();
IWorkbook workbook = null;
Stream stream = new FileStream(fileName, FileMode.OpenOrCreate);
string suffix = fileName.Substring(fileName.LastIndexOf(".") + 1).ToLower();
if (suffix == "xlsx") // 2007版本
{
workbook = new XSSFWorkbook(stream);
}
else if (suffix == "xls") // 2003版本
{
workbook = new HSSFWorkbook(stream);
}
//获取excel的第一个sheet
ISheet sheet = workbook.GetSheetAt(0);
//获取sheet的第一行
IRow headerRow = sheet.GetRow(headrow);
//一行最后一个方格的编号 即总的列数
int cellCount = headerRow.LastCellNum;
//最后一列的标号 即总的行数
int rowCount = sheet.LastRowNum;
//列名
for (int i = 0; i < cellCount; i++)
{
dt.Columns.Add(headerRow.GetCell(i).ToString());
}
for (int i = (sheet.FirstRowNum + headrow + 1); i <= sheet.LastRowNum; i++)
{
DataRow dr = dt.NewRow();
IRow row = sheet.GetRow(i);
for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
{
dr[j] = row.GetCell(j).ToString();
}
}
dt.Rows.Add(dr);
}
sheet = null;
workbook = null;
return dt;
}
///
/// 简报导出
///
///
///
public string MarketExportToExcel(string stime,string etime,Market market )
{
try
{
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("Sheet1");
ICellStyle cellStyle = workbook.CreateCellStyle();
//为避免日期格式被Excel自动替换,所以设定 format 为 『@』 表示一率当成text來看
//cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("@");
//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;
NPOI.SS.UserModel.IFont cellfont = workbook.CreateFont();
cellfont.Boldweight = (short)FontBoldWeight.Normal;
cellStyle.SetFont(cellfont);
ICellStyle cellStylebt = workbook.CreateCellStyle();
NPOI.SS.UserModel.IFont cellfontbt = workbook.CreateFont();
cellfontbt.Boldweight = (short)FontBoldWeight.Bold;
cellStylebt.SetFont(cellfontbt);
cellStylebt.VerticalAlignment = VerticalAlignment.Center;
cellStylebt.Alignment = HorizontalAlignment.Center;
IRow irow1 = sheet.CreateRow(1);
ICell cell1 = irow1.CreateCell(0);
cell1.SetCellValue("时间:" + stime + " 至 " + etime);
cell1.CellStyle = cellStylebt;
sheet.AddMergedRegion(new CellRangeAddress(1, 1, 0, 7));
//((HSSFSheet)sheet).SetEnclosedBorderOfRegion(new CellRangeAddress(1, 1, 0, 7), BorderStyle.Thin, NPOI.HSSF.Util.HSSFColor.Black.Index);
#region 产品投诉情况
List dt1 = market.product ;
IRow irow2 = sheet.CreateRow(2);
ICell cell2 = irow2.CreateCell(0);
cell2.SetCellValue("产品投诉情况");
cell2.CellStyle = cellStylebt;
sheet.AddMergedRegion(new CellRangeAddress(2, 2, 0, 7));
int dtrow = 3;
if (dt1.Count >0)
{
int dt = 0;
int a = dt1.Count / 3;
float b = dt1.Count % 3;
if (b >0)
a = a + 1;
dtrow += a;
List irow3list = new List();
for (int i =0;i
/// 投诉产品日期分布表
///
///
///
public string DistributionToExcel(DateTime datetime, Product product)
{
try
{
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("Sheet1");
ICellStyle cellStyle = workbook.CreateCellStyle();
NPOI.SS.UserModel.IFont cellfont = workbook.CreateFont();
cellfont.Boldweight = (short)FontBoldWeight.Normal;
cellStyle.SetFont(cellfont);
ICellStyle cellStylebt = workbook.CreateCellStyle();
NPOI.SS.UserModel.IFont cellfontbt = workbook.CreateFont();
cellfontbt.Boldweight = (short)FontBoldWeight.Bold;
cellStylebt.SetFont(cellfontbt);
cellStylebt.VerticalAlignment = VerticalAlignment.Center;
cellStylebt.Alignment = HorizontalAlignment.Center;
IRow irow1 = sheet.CreateRow(0);
ICell cell1 = irow1.CreateCell(0);
cell1.SetCellValue(datetime.Year +"年"+datetime .Month +"月份投诉产品日期分布情况表");
cell1.CellStyle = cellStylebt;
sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 13));
#region 产品投诉情况
IRow irow2 = sheet.CreateRow(1);
ICell cell2 = irow2.CreateCell(0);
ICellStyle style13 = workbook.CreateCellStyle();
style13.BorderDiagonalLineStyle = BorderStyle.Thin;
style13.BorderDiagonal = BorderDiagonal.Backward;
style13.BorderDiagonalColor = IndexedColors.Black .Index;
StringBuilder sb = new StringBuilder();
sb.AppendLine("数量".PadLeft(15));//该行不足长度10在左侧填空格
sb.AppendLine("日期".PadRight(15));//该行不足长度10在右侧填空格
cell2.SetCellValue(sb.ToString ());
cell2.CellStyle = cellStylebt;
irow2.GetCell(0).CellStyle = style13;
sheet.AddMergedRegion(new CellRangeAddress(1, 2, 0,0 ));
ICell cell6 = irow2.CreateCell(1);
cell6.SetCellValue("投诉产品");
cell6.CellStyle = cellStylebt;
sheet.AddMergedRegion(new CellRangeAddress(1, 1, 1, 1));
for (int i=0;i<5;i ++)
{
string msg = "";
switch (i)
{
case 0:
msg = datetime.AddMonths(-11).Month + "-" + datetime.AddMonths(-4).Month + "月份日期";
break;
case 1:
msg = datetime.AddMonths(-3).Month + "月份日期";
break;
case 2:
msg = datetime.AddMonths(-2).Month + "月份日期";
break;
case 3:
msg = datetime.AddMonths(-1).Month + "月份日期";
break;
case 4:
msg = "不清楚日期";
break;
}
ICell cell3 = irow2.CreateCell(i *2+ 2 );
cell3.SetCellValue(msg);
cell3.CellStyle = cellStylebt;
sheet.AddMergedRegion(new CellRangeAddress(1, 1, i * 2 + 2, i * 2 + 3));
}
IRow irow3 = sheet.CreateRow(2);
for (int i = 0; i < 11; i++)
{
string msg = "";
if (i ==0)
{
msg = "数量";
}
else
{
if (i % 2 == 0)
{
msg = "占比";
}
else
{
msg = "数量";
}
}
ICell cell4 = irow3.CreateCell(i+1);
cell4.SetCellValue(msg);
cell4.CellStyle = cellStylebt;
}
List dt1 = product.dates;
if (dt1!=null )
{
for (int i=0;i < dt1.Count;i ++)
{
IRow irow4 = sheet.CreateRow(3 + i);
string msg = "";
for (int j = 0; j < 12; j ++)
{
switch (j )
{
case 0:
msg = dt1[i].name;
break;
case 1:
msg = dt1[i].total.ToString();
break;
case 2:
msg = dt1[i].MonthCount1 .ToString ();
break;
case 3:
msg = dt1[i].MonthCountmix1 .ToString();
break;
case 4:
msg = dt1[i].MonthCount2.ToString();
break;
case 5:
msg = dt1[i].MonthCountmix2.ToString();
break;
case 6:
msg = dt1[i].MonthCount3.ToString();
break;
case 7:
msg = dt1[i].MonthCountmix3.ToString();
break;
case 8:
msg = dt1[i].MonthCount4.ToString();
break;
case 9:
msg = dt1[i].MonthCountmix4.ToString();
break;
case 10:
msg = dt1[i].MonthCount5.ToString();
break;
case 11:
msg = dt1[i].MonthCountmix5.ToString();
break;
}
ICell cell5 = irow4.CreateCell(j);
cell5.SetCellValue(msg);
cell5.CellStyle = cellStylebt;
}
}
}
int t = dt1.Count + 3;int count = 0;
List Factory1 = product.factory;
List Factory2 = product.problem;
List Factory3 = product.product;
int factory = 0, problem = 0, productcode = 0;
if (Factory1 != null)
factory = (Factory1.Count / 2) + (0 == Factory1.Count % 2 ? 0 : 1);
if (Factory2 != null)
problem = Factory2.Count;
if (Factory3 != null)
productcode = Factory3.Count;
bool istrue = true; int a = 0, total = problem + productcode;
if (factory>(total))
{
count = factory;
a = factory - total;
}
else
{
istrue = false;
count = total;
}
IRow irow5 = sheet.CreateRow(t);
ICell cell7 = irow5.CreateCell(0);
cell7.SetCellValue("工\n厂\n投\n诉\n占\n比\n");
cell7.CellStyle = cellStylebt;
sheet.AddMergedRegion(new CellRangeAddress(t, t+ count, 0, 0));
ICell cell10 = irow5.CreateCell(7);
cell10.SetCellValue("各\n质\n量\n问\n题\n占\n比\n");
cell10.CellStyle = cellStylebt;
int structure = 0;
if (istrue)
{
if (a >1)
{
structure = t + problem + a / 2;
sheet.AddMergedRegion(new CellRangeAddress(t, t + problem + a / 2, 7, 7));
}
else
{
structure = t + problem;
sheet.AddMergedRegion(new CellRangeAddress(t, t + problem + 1, 7, 7));
}
}
else
sheet.AddMergedRegion(new CellRangeAddress(t, t + problem, 7, 7));
IRow irow7 = sheet.CreateRow(structure);
ICell cell11 = irow7.CreateCell(7);
cell11.SetCellValue("结\n构\n占\n比\n");
cell11.CellStyle = cellStylebt;
if (istrue)
{
if (a > 1)
sheet.AddMergedRegion(new CellRangeAddress(t + problem + a / 2+1, t + total + 1 +a/2, 7, 7));
else
sheet.AddMergedRegion(new CellRangeAddress(t + problem + 2, t + total + 2, 7, 7));
}
else
sheet.AddMergedRegion(new CellRangeAddress(t + problem+1, t + 1 + total, 7, 7));
if (Factory1 != null)
{
for (int i = 0; i < count; i++)
{
if (i ==0 || t + i== structure)
{
if (i < Factory1.Count )
{
for (int j = 0; j < 6; j++)
{
string msg = "";
switch (j)
{
case 0:
msg = Factory1[i * 2].name;
break;
case 1:
msg = Factory1[i * 2].number.ToString();
break;
case 2:
msg = Factory1[i * 2].proportion;
break;
case 3:
msg = Factory1[i * 2 + 1].name;
break;
case 4:
msg = Factory1[i * 2 + 1].number.ToString();
break;
case 5:
msg = Factory1[i * 2 + 1].proportion;
break;
}
if (i == 0)
{
ICell cell8 = irow5.CreateCell(j + 1);
cell8.SetCellValue(msg);
cell8.CellStyle = cellStylebt;
}
else
{
ICell cell8 = irow7.CreateCell(j + 1);
cell8.SetCellValue(msg);
cell8.CellStyle = cellStylebt;
}
}
}
if (i ==0)
{
for (int z = 0; z < 3; z++)
{
string msg = "";
switch (z)
{
case 0:
ICell cell8 = irow5.CreateCell(8);
cell8.SetCellValue(Factory2[0].name );
cell8.CellStyle = cellStylebt;
sheet.AddMergedRegion(new CellRangeAddress(t, t , 8, 9));
break;
case 1:
ICell cell9 = irow5.CreateCell(10);
cell9.SetCellValue(Factory2[0].number .ToString ());
cell9.CellStyle = cellStylebt;
break;
case 2:
ICell cell12 = irow5.CreateCell(11);
cell12.SetCellValue(Factory2[0].proportion);
cell12.CellStyle = cellStylebt;
break;
}
}
}
else if (t + i == structure)
{
for (int z = 0; z < 3; z++)
{
string msg = "";
switch (z)
{
case 0:
ICell cell8 = irow7.CreateCell(8);
cell8.SetCellValue(Factory3[1].name);
cell8.CellStyle = cellStylebt;
sheet.AddMergedRegion(new CellRangeAddress(structure, structure, 8, 9));
break;
case 1:
ICell cell9 = irow7.CreateCell(10);
cell9.SetCellValue(Factory3[1].number.ToString());
cell9.CellStyle = cellStylebt;
break;
case 2:
ICell cell12 = irow7.CreateCell(11);
cell12.SetCellValue(Factory3[1].proportion);
cell12.CellStyle = cellStylebt;
break;
}
}
}
}
else
{
IRow irow6 = sheet.CreateRow(t + i);
if (i < Factory1.Count)
{
for (int j = 0; j < 6; j++)
{
string msg = "";
switch (j)
{
case 0:
msg = Factory1[i * 2].name;
break;
case 1:
msg = Factory1[i * 2].number.ToString();
break;
case 2:
msg = Factory1[i * 2].proportion;
break;
case 3:
msg = Factory1[i * 2 + 1].name;
break;
case 4:
msg = Factory1[i * 2 + 1].number.ToString();
break;
case 5:
msg = Factory1[i * 2 + 1].proportion;
break;
}
ICell cell9 = irow6.CreateCell(j + 1);
cell9.SetCellValue(msg);
cell9.CellStyle = cellStylebt;
}
}
if (istrue)
{
int b = 1;
if (a >1)
{
b= (a / 2) + (0 == a % 2 ? 0 : 1);
}
if (i < Factory2.Count -1)
{
for (int z = 0; z < 3; z++)
{
string msg = "";
switch (z)
{
case 0:
ICell cell8 = irow6.CreateCell(8);
cell8.SetCellValue(Factory2[i].name);
cell8.CellStyle = cellStylebt;
sheet.AddMergedRegion(new CellRangeAddress(t + i, t + i, 8, 9));
break;
case 1:
ICell cell9 = irow6.CreateCell(10);
cell9.SetCellValue(Factory2[i].number.ToString());
cell9.CellStyle = cellStylebt;
break;
case 2:
ICell cell12 = irow6.CreateCell(11);
cell12.SetCellValue(Factory2[i].proportion);
cell12.CellStyle = cellStylebt;
break;
}
}
}
else if (i < Factory2.Count )
{
for (int z = 0; z < 3; z++)
{
string msg = "";
switch (z)
{
case 0:
ICell cell8 = irow7.CreateCell(8);
cell8.SetCellValue(Factory2[i].name);
cell8.CellStyle = cellStylebt;
sheet.AddMergedRegion(new CellRangeAddress(t + i, t + i+b , 8, 9));
break;
case 1:
ICell cell9 = irow7.CreateCell(10);
cell9.SetCellValue(Factory2[i].number.ToString());
cell9.CellStyle = cellStylebt;
sheet.AddMergedRegion(new CellRangeAddress(t + i, t + i + b, 10, 10));
break;
case 2:
ICell cell12 = irow7.CreateCell(11);
cell12.SetCellValue(Factory2[i].proportion);
cell12.CellStyle = cellStylebt;
sheet.AddMergedRegion(new CellRangeAddress(t + i, t + i + b, 11, 11));
break;
}
}
}
if (i <( Factory3.Count + Factory2.Count+b -1)&& i>= Factory2.Count + b)
{
for (int z = 0; z < 3; z++)
{
string msg = "";
switch (z)
{
case 0:
ICell cell8 = irow6.CreateCell(8);
cell8.SetCellValue(Factory3[i- Factory2.Count -b ].name);
cell8.CellStyle = cellStylebt;
sheet.AddMergedRegion(new CellRangeAddress(t + i, t + i, 8, 9));
break;
case 1:
ICell cell9 = irow6.CreateCell(10);
cell9.SetCellValue(Factory3[i - Factory2.Count - b].number.ToString());
cell9.CellStyle = cellStylebt;
break;
case 2:
ICell cell12 = irow6.CreateCell(11);
cell12.SetCellValue(Factory3[i - Factory2.Count - b].proportion);
cell12.CellStyle = cellStylebt;
break;
}
}
}
else if ( i >= Factory2.Count + b&& i < Factory2.Count + b+ Factory3.Count )
{
for (int z = 0; z < 3; z++)
{
string msg = "";
switch (z)
{
case 0:
ICell cell8 = irow7.CreateCell(8);
cell8.SetCellValue(Factory3[i - Factory2.Count - b].name);
cell8.CellStyle = cellStylebt;
sheet.AddMergedRegion(new CellRangeAddress(t + i, t + i + b, 8, 9));
break;
case 1:
ICell cell9 = irow7.CreateCell(10);
cell9.SetCellValue(Factory3[i - Factory2.Count - b].number.ToString());
cell9.CellStyle = cellStylebt;
sheet.AddMergedRegion(new CellRangeAddress(t + i, t + i + b, 10, 10));
break;
case 2:
ICell cell12 = irow7.CreateCell(11);
cell12.SetCellValue(Factory3[i - Factory2.Count - b].proportion);
cell12.CellStyle = cellStylebt;
sheet.AddMergedRegion(new CellRangeAddress(t + i, t + i + b, 11, 11));
break;
}
}
}
}
}
}
}
#endregion
//自适应列宽度
for (int i = 0; i < 12; i++)
{
// sheet.AutoSizeColumn(i);
sheet.SetColumnWidth(i, 15 * 256);
}
using (MemoryStream ms = new MemoryStream())
{
workbook.Write(ms);
HttpContext curContext = HttpContext.Current;
// 设置编码和附件格式
curContext.Response.ContentType = "application/vnd.ms-excel";
curContext.Response.ContentEncoding = Encoding.UTF8;
curContext.Response.Charset = "";
curContext.Response.AppendHeader("Content-Disposition",
"attachment;filename=" + HttpUtility.UrlEncode("投诉产品日期分布表" + ".xls", Encoding.UTF8));
curContext.Response.BinaryWrite(ms.GetBuffer());
workbook = null;
ms.Close();
ms.Dispose();
curContext.Response.End();
}
return "";
}
catch
{
return "导出失败!";
}
}
}
}