asp.net如何将DataTable分多个Sheet导出到Excel
asp.net怎么将DataTable分多个Sheet导出到Excel
怎么将DataTable按照部门分类,部门分别添加到sheet中并导出,请问要怎么实现
参考了一个帖子http://blog.csdn.net/mh942408056/article/details/7298325
但是会报错
各路大神要怎么实现这种功能啊,
------解决思路----------------------
------解决思路----------------------
用这个导出,而不是html方式导出,html根本没有工作簿的概念
------解决思路----------------------
1楼代码引用的Microsoft.Office.Interop.Excel,你服务器上必须按照office,而且必须将组件注册,还要将程序集发布为32位,然后IIS里设置允许使用32位程序集,怪麻烦的.
还是用NPOI方便.
------解决思路----------------------
的确啊..
使用组件npoi多个sheet无非就是
这就创建了3个sheet,在代码里 叫
至于每个部门的sheet里 写入这个部门所有的用户无非就是循环结果集给单元格赋值而已.
当然其中
是你第一个ISheet变量而已..
循环部门的结果集就行...具体你自己下载那个Demo吧
------解决思路----------------------
怎么将DataTable按照部门分类,部门分别添加到sheet中并导出,请问要怎么实现
参考了一个帖子http://blog.csdn.net/mh942408056/article/details/7298325
但是会报错
各路大神要怎么实现这种功能啊,
------解决思路----------------------
/// <summary>
/// 导出Excel 把一个dataset的多个datatable导入到一个excel的多个sheet中
/// </summary>
/// <param name="ds">DataSet</param>
/// <param name="tableNames">ds里每个表的表名</param>
/// <param name="strExcelFileName">导出Excel名称(YYYY-MM-DD.xls)</param>
public void doExport(List<DataSet> list, string strExcelFileName)
{
//object oMissing = System.Reflection.Missing.Value;
//Microsoft.Office.Interop.Excel.ApplicationClass xlApp = new Excel.ApplicationClass();
////xlApp.Application.Workbooks.Add(true);
//try
//{
// Microsoft.Office.Interop.Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
// Excel.Worksheet xlSheet;
// xlSheet = (Excel.Worksheet)xlWorkBook.Worksheets.Add(oMissing, oMissing, 1, oMissing);
// xlSheet.Name = ds.DataSetName;
// int ExcelRowNumber = 1; //记录数据集里表所在的行
// foreach (DataSet ds in list)
// {
// for (int i = 0; i < ds.Tables.Count; i++)
// {
// string strBuffer = "";
// int tableRowAcount = 0; //记录单个表的行数
// for (int j = 0; j < ds.Tables[i].Rows.Count; j++)
// {
// for (int k = 0; k < ds.Tables[i].Columns.Count; k++)
// {
// strBuffer += ds.Tables[i].Rows[j][k].ToString();
// if (k < ds.Tables[i].Columns.Count - 1)
// strBuffer += "\t";
// }
// strBuffer += "\n";
// tableRowAcount++;
// }
// System.Windows.Forms.Clipboard.SetDataObject("");
// System.Windows.Forms.Clipboard.SetDataObject(strBuffer);
// ((Excel.Range)xlSheet.Cells[ExcelRowNumber, 1]).Select();
// xlSheet.Paste(oMissing, oMissing);
// System.Windows.Forms.Clipboard.SetDataObject("");
// ExcelRowNumber += tableRowAcount;
// ExcelRowNumber++;
// } //end for
// }
// xlWorkBook.Close(Excel.XlSaveAction.xlSaveChanges, oMissing, oMissing);
// System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook);
// xlWorkBook = null;
//}
//catch (Exception ex)
//{
// MessageBox.Show(ex.Message);
//}
//finally
//{
// xlApp.Quit();
// xlApp = null;
// GC.Collect();
//}
}
------解决思路----------------------
用这个导出,而不是html方式导出,html根本没有工作簿的概念
------解决思路----------------------
1楼代码引用的Microsoft.Office.Interop.Excel,你服务器上必须按照office,而且必须将组件注册,还要将程序集发布为32位,然后IIS里设置允许使用32位程序集,怪麻烦的.
还是用NPOI方便.
------解决思路----------------------
的确啊..
使用组件npoi多个sheet无非就是
hssfworkbook.CreateSheet("业务部");
hssfworkbook.CreateSheet("研发部");
hssfworkbook.CreateSheet("财务部");
这就创建了3个sheet,在代码里 叫
ISheet sheet
至于每个部门的sheet里 写入这个部门所有的用户无非就是循环结果集给单元格赋值而已.
//表头
IRow row = sheet.CreateRow(0);
for (int i = 0; i < dt.Columns.Count; i++)
{
ICell cell = row.CreateCell(i);
cell.SetCellValue(dt.Columns[i].ColumnName);
}
//数据
for (int i = 0; i < dt.Rows.Count; i++)
{
IRow row1 = sheet.CreateRow(i + 1);
for (int j = 0; j < dt.Columns.Count; j++)
{
ICell cell = row1.CreateCell(j);
cell.SetCellValue(dt.Rows[i][j].ToString());
}
}
当然其中
sheet.CreateRow(0);
是你第一个ISheet变量而已..
循环部门的结果集就行...具体你自己下载那个Demo吧
------解决思路----------------------
Object Nothing = System.Reflection.Missing.Value;
object filename = filePath; //文件保存路径
//实例化Excel对象
Excel.Application myexcel = new Excel.ApplicationClass();
//添加工作表
Workbook myworkbook = myexcel.Application.Workbooks.Add(true);
Excel.Worksheet myworksheet = (Excel.Worksheet)myexcel.Worksheets["Sheet1"];
myworksheet.Name = "HobbyGaGa";
//定义一个区域范围
Excel.Range myrange = myexcel.get_Range("A1", "AM1");
//显示excel程序
myexcel.Visible = false;
int hw_i = 0, hg_i = 0, rc_i = 0, sh_i = 0, hr_i = 0, hy_i = 0, rw_i = 0;
int hw_count = 0, hg_count = 0, rc_count = 0, sh_count = 0, hr_count = 0, hy_count = 0, rw_count = 0;
//单元格行高
myworksheet.Rows.RowHeight = 25;
//单元格字体大小
myworksheet.Rows.Font.Size = 12;
//单元格字体
myworksheet.Rows.Font.Name = "宋体";
myworksheet.Rows.VerticalAlignment = XlHAlign.xlHAlignCenter;
myworksheet.Rows.WrapText = true;
//第一行(列名)
myworksheet.Cells[1, 1] = "订单来源";
myworksheet.get_Range(myworksheet.Cells[1, 1], myworksheet.Cells[1, 1]).ColumnWidth = 12;
myworksheet.Cells[1, 2] = "日期";
myworksheet.get_Range(myworksheet.Cells[1, 2], myworksheet.Cells[1, 2]).ColumnWidth = 20;
myworksheet.Cells[1, 3] = "订单号";
myworksheet.get_Range(myworksheet.Cells[1, 3], myworksheet.Cells[1, 3]).ColumnWidth = 10;
//调整格式
myworksheet.get_Range(myworksheet.Cells[1, 1], myworksheet.Cells[1, 42]).RowHeight = 42.75;
myworksheet.get_Range(myworksheet.Cells[1, 1], myworksheet.Cells[1, 42]).Font.Bold = true;
myworksheet.get_Range(myworksheet.Cells[1, 1], myworksheet.Cells[1, 42]).Rows.VerticalAlignment = XlHAlign.xlHAlignCenter;
myworksheet.get_Range(myworksheet.Cells[1, 1], myworksheet.Cells[1, 42]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
myworksheet.get_Range(myworksheet.Cells[1, 6], myworksheet.Cells[1, 30]).Cells.Interior.Color = System.Drawing.Color.FromArgb(255, 255, 0);
myworksheet.get_Range(myworksheet.Cells[1, 31], myworksheet.Cells[1, 42]).Cells.Interior.Color = System.Drawing.Color.FromArgb(255, 204, 153);
//复制工作区 并重命名
myworksheet.Copy(Type.Missing, myworkbook.Sheets[1]);
myworksheet.Copy(Type.Missing, myworkbook.Sheets[1]);
myworksheet.Copy(Type.Missing, myworkbook.Sheets[1]);
myworksheet.Copy(Type.Missing, myworkbook.Sheets[1]);
myworksheet.Copy(Type.Missing, myworkbook.Sheets[1]);
myworksheet.Copy(Type.Missing, myworkbook.Sheets[1]);
Excel.Worksheet sheet_hw = (Excel.Worksheet)myworkbook.Worksheets[2];
Excel.Worksheet sheet_rc = (Excel.Worksheet)myworkbook.Worksheets[3];
Excel.Worksheet sheet_sh = (Excel.Worksheet)myworkbook.Worksheets[4];
Excel.Worksheet sheet_hr = (Excel.Worksheet)myworkbook.Worksheets[5];
Excel.Worksheet sheet_hy = (Excel.Worksheet)myworkbook.Worksheets[6];
Excel.Worksheet sheet_rw = (Excel.Worksheet)myworkbook.Worksheets[7];
sheet_hw.Name = "HobbyWOW";
sheet_rc.Name = "RCMaster";
sheet_sh.Name = "SureHobby";
sheet_hr.Name = "HobbyReal";
sheet_hy.Name = "HobbyYES";
sheet_rw.Name = "RCWOW";
这样就有了多个工作区
foreach (var order in orders) //改成你的遍历table 放到你的工作区了
if(部门1)
myworksheet.Cells[hg_i + hg_count + 2, 1] = order.FromPT;
myworksheet.Cells[hg_i + hg_count + 2, 2] = order.CreatedOn.ToString("yyyy-MM-dd HH:mm");
myworksheet.Cells[hg_i + hg_count + 2, 3] = order.OrderId.ToString();