C# dt导出excel 生成多个sheet!

小米粥 2013-02-19 02:55:47
问题是这样的。我从数据库里查询到几条数据,返回一个datatable。通过循行,生成一个<table></table>的html格式的字符串。

然后通过下面:
System.Web.HttpContext curContext = System.Web.HttpContext.Current;
StringWriter sw = new StringWriter();
sw.WriteLine("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">");
sw.WriteLine("<head>");
sw.WriteLine("<!--[if gte mso 9]>");
sw.WriteLine("<xml>");
sw.WriteLine(" <x:ExcelWorkbook>");
sw.WriteLine(" <x:ExcelWorksheets>");
sw.WriteLine(" <x:ExcelWorksheet>");
sw.WriteLine(" <x:Name>数据报表</x:Name>");
sw.WriteLine(" <x:WorksheetOptions>");
sw.WriteLine(" <x:Print>");
sw.WriteLine(" <x:ValidPrinterInfo />");
sw.WriteLine(" </x:Print>");
sw.WriteLine(" </x:WorksheetOptions>");
sw.WriteLine(" </x:ExcelWorksheet>");
sw.WriteLine(" </x:ExcelWorksheets>");
sw.WriteLine("</x:ExcelWorkbook>");
sw.WriteLine("</xml>");
sw.WriteLine("<![endif]-->");
sw.WriteLine("</head>");
sw.WriteLine("<body>");
sw.WriteLine(sb.ToString());
sw.WriteLine("</body>");
sw.WriteLine("</html>");

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.AppendHeader("content-disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, Encoding.UTF8).ToString() + ".xls");
curContext.Response.Write("<meta http-equiv=Content-Type content=text/html;charset=gb2312>");
curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");

// 返回客户端
curContext.Response.Write(sw);
sw.Close();
sb 就是上面拼接的字符串变量。
现在想实现一条数据生成一个sheet,就是一个excel包含多个sheet。该如何在此基础上修改?
...全文
1081 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen_ya_ping 2014-09-30
  • 打赏
  • 举报
回复
NPOI强烈推荐。
  • 打赏
  • 举报
回复
npoi 这个很好用,怎么定义都可以,我也刚做了这个导出多个SHEET的
xiao_1724200453 2014-09-29
  • 打赏
  • 举报
回复
Excel文件创建多个工作表 private void 打开Excel文件ToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog.Filter="Excel文件|*.xls";//设置打开文件筛选器 OpenFileDialog.Title = "打开Excel文件";//设置打开对话框标题 OpenFileDialog.Multiselect = false;//设置打开对话框中不能多选 if (OpenFileDialog.ShowDialog() == DialogResult.OK)//判断是否选择了文件 { M_str_Name = OpenFileDialog.FileName;//记录选择的Excel文件 WBrowser_Excel.Navigate(M_str_Name);//在窗体中显示Excel文件内容 } } private void 创建工作表ToolStripMenuItem_Click(object sender, EventArgs e) { CloseProcess();//关闭Excel进程 Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();//实例化Excel对象 object missing = Missing.Value;//获取缺少的object类型值 //打开指定的Excel文件 Microsoft.Office.Interop.Excel.Workbook workbook = excel.Application.Workbooks.Open(M_str_Name, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing); Microsoft.Office.Interop.Excel.Worksheet newWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(missing, missing, 1, missing); MessageBox.Show("添加工作表成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); excel.Application.DisplayAlerts = false;//不显示提示对话框 workbook.Save();//保存工作表 workbook.Close(false, missing, missing);//关闭工作表 WBrowser_Excel.Navigate(M_str_Name);//在窗体中显示Excel文件内容 }
qzyf1992 2014-09-28
  • 打赏
  • 举报
回复
openxml,aspose,epplus,npoi,com组建 欢迎你
polluxll 2014-09-28
  • 打赏
  • 举报
回复
http://blog.csdn.net/mh942408056/article/details/7297572?reload
  • 打赏
  • 举报
回复
WorkbookSheet --> Worksheet 生成xml格式当然是可以得到复杂的excel工作簿的。但是你花时间掌握了excel xml了吗?从csdn上无法得到好的答案。而如果你要对excel编程,最好调用封装好的excel COM编程api。 这就好像你编写c#程序,而不是直接写 0、1、0、1代码一样,对于excel编程优先使用api接口库去操作,而不是直接编辑xml。
  • 打赏
  • 举报
回复
引用 楼主 sai_shuang 的回复:
现在想实现一条数据生成一个sheet,就是一个excel包含多个sheet。该如何在此基础上修改?
无法在此基础上修改。这个东西根本就只能弄个最简单的table,没有任何多一点的Excel格式、公式、单元格样式等技术,更没有WorkbookSheet概念。 要想输出excel,你就应该使用真正面对excel的编程方式。而不是这种。
行侠者 2013-09-01
  • 打赏
  • 举报
回复
alan817 2013-02-20
  • 打赏
  • 举报
回复
用第三方 org.in2bits.MyXls 非常方便,不需要安装office
tkk0003 2013-02-20
  • 打赏
  • 举报
回复
同求解决方法,我在<x:ExcelWorksheets>中放置多个<x:ExcelWorksheet>,能生成多个sheet页,但如何在其他sheet中放入内容呢。
小米粥 2013-02-19
  • 打赏
  • 举报
回复
没有人吗? 帮忙顶下
小米粥 2013-02-19
  • 打赏
  • 举报
回复
其实就是导出excel的一个问题。初学者,求指导。详细点更好!
protected void Button1_Click(object sender, EventArgs e) { System.Web.HttpContext curContext = System.Web.HttpContext.Current; if (dt != null) { string filename = "档案全宗"; string name1 = filename; filename = HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8); HttpResponse resp = System.Web.HttpContext.Current.Response; resp.Charset = "utf-8"; resp.Clear(); resp.AppendHeader("Content-Disposition", "attachment;filename=" + filename + ".xls"); resp.ContentEncoding = System.Text.Encoding.UTF8; resp.ContentType = "application/ms-excel"; string style ="excel; charset=utf-8\"/>"+ ""; resp.Write(style); //resp.Write(ExportTable(list)); resp.Write(""); //VideoList = (List)Session["dbVideoList"]; for(int i=0;i<dt.Rows.Count;i++) { resp.Write(""); resp.Write(""); resp.Write(""); resp.Write(""); resp.Write(""); resp.Write(""); } resp.Write("
" +"文件标题"+ "" + "档案类别" + "" +"发文日期" + "" +"文件链接" + "" +"备注" + "
" + dt.Rows[i]["FileName"]+ "" +dt.Rows[i]["type"]+ "" + dt.Rows[i]["fromtime"].ToString()+ "" + dt.Rows[i]["url"]+ "" + dt.Rows[i]["beizhu"]+ "
"); resp.Flush(); resp.End(); }

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧