不引用office动态库导出excel
public class OutExcelReport
{
/// <summary>
/// 把 DataSet 的数据导成 Excel
/// </summary>
/// <param name="p_dsExport">要导出的 DataSet</param>
/// <param name="p_strFileName">下载时客户端默认的文件名</param>
/// <param name="p_blnHaveHeaderText">true 标示第一行是列名,默认值为 true</param>
/// <param name="rrModel">报表统计结果</param>
/// <param name="formType">报表物资类型</param>
public static void DataSetToExcel(DataSet p_dsExport, string p_strFileName, bool p_blnHaveHeaderText, ReportResultModel rrModel, string formType)
{
if (p_dsExport == null)
{
return;
}
string strContext = GenerateWorkSheet(p_dsExport, rrModel, formType);
DownloadExcelFile(strContext, p_strFileName);
}
/// <summary>
///
/// </summary>
/// <param name="p_strFileContext"></param>
/// <param name="p_strFileName"></param>
public static void DownloadExcelFile(string p_strFileContext, string p_strFileName)
{
// Appending Headers
if (CommonFunc.IsNullString(p_strFileName))
{
p_strFileName = "Excel.xls";
}
if (!p_strFileName.Trim().ToLower().EndsWith(".xls"))
{
p_strFileName += ".xls";
}
try
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Buffer = true;
p_strFileName = CommonFunc.UrlEncode(p_strFileName);
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
HttpContext.Current.Response.AppendHeader("content-disposition", "attachment; filename=" + p_strFileName);
}
catch
{
}
//Writeout the Content
HttpContext.Current.Response.Write(p_strFileContext);
try
{
HttpContext.Current.Response.End();
}
catch
{
}
}
public static string GenerateWorkSheetBottom(string formType, ReportResultModel rrModel)
{
string[] strArraw = new string[8];
switch (formType.ToLower())
{
case "dormrepair": //宿舍维修申请
{
strArraw = new string[] { "统计项", rrModel.Total, "运行中申请单数", rrModel.Running, "已完成申请单数", rrModel.Finished, "", ""};
break;
}
case "managerepair": //办公维修
{
strArraw = new string[] { "统计项", rrModel.Total, "运行中申请单数", rrModel.Running, "已完成申请单数", rrModel.Finished, "", "" };
break;
}
case "winecollar": //酒水申请
{
strArraw = new string[] { "统计项", rrModel.Total, "运行中申请单数", rrModel.Running, "已完成申请单数", rrModel.Finished, "酒水申请成本汇总", rrModel.AllCost };
break;
}
case "publicactivitysupply"://纪念品
{
strArraw = new string[] { "统计项", rrModel.Total, "运行中申请单数", rrModel.Running, "已完成申请单数", rrModel.Finished, "纪念品申请成本汇总", rrModel.AllCost };
break;
}
case "adminmaterial": //行政物资
{
strArraw = new string[] { "统计项", rrModel.Total, "运行中申请单数", rrModel.Running, "已完成申请单数", rrModel.Finished, "行政物资成本汇总", rrModel.AllCost };
break;
}
case "consumables": //办公用品
{
strArraw = new string[] { "统计项", rrModel.Total, "运行中申请单数", rrModel.Running, "已完成申请单数", rrModel.Finished, "办公文具成本汇总", rrModel.AllCost };
break;
}
case "receptroom": //接待房
{
strArraw = new string[] { "统计项", rrModel.Total, "运行中申请单数", rrModel.Running, "已完成申请单数", rrModel.Finished, "接待房成本汇总", rrModel.AllCost };
break;
}
default:
break;
}
StringBuilder strExcelXml = new StringBuilder();
strExcelXml.Append("<Row></Row>\r\n<Row>");
for (int j = 1; j < 9; j++)
{
strExcelXml.Append("<Cell ss:Index=\"" + (j).ToString() + "\"><Data ss:Type=\"String\">");
strExcelXml.Append(CommonFunc.HtmllEncode(strArraw[j - 1]));
strExcelXml.Append("</Data></Cell>\r\n");
}
strExcelXml.Append("</Row>\r\n");
return strExcelXml.ToString();
}
public static string GenerateWorkSheet(DataSet p_dsExport, ReportResultModel rrModel, string formType)
{
StringBuilder strExcelXml = new StringBuilder();
strExcelXml.Append(ExcelHeader());
strExcelXml.Append(ExcelWorkSheetOptions());
foreach (DataTable dt in p_dsExport.Tables)
{
strExcelXml.Append("<Worksheet ss:Name=\"" + dt.TableName + "\">");
strExcelXml.Append("<Table>");
#region 用车报表导出的表头有两行
//added by dengqian 2013-09-22
if (formType.Equals("manageinfocar") || formType.Equals("industrycar"))
{
strExcelXml.Append(GetHeaderText_tworow(dt));
}
else
{
strExcelXml.Append(GetHeaderText(dt));
}
#endregion
//old: strExcelXml.Append(GetHeaderText(dt));
int intColCount = dt.Columns.Count;
foreach (DataRow dr in dt.Rows)
{
strExcelXml.Append("<Row>\r\n");
for (int j = 0; j < intColCount; j++)
{
strExcelXml.Append("<Cell ss:Index=\"" + (j + 1).ToString() + "\"><Data ss:Type=\"String\">");
strExcelXml.Append(CommonFunc.HtmllEncode(CommonFunc.ObjectToNullStr(dr[j])));
strExcelXml.Append("</Data></Cell>\r\n");
}
strExcelXml.Append("</Row>\r\n");
}
if (rrModel != null)
{
strExcelXml.Append(GenerateWorkSheetBottom(formType, rrModel));
}
strExcelXml.Append("</Table>");
strExcelXml.Append("</Worksheet>");
}
strExcelXml.Append("</Workbook>\r\n");
return strExcelXml.ToString();
}
private static string GetHeaderText(DataTable p_dt)
{
StringBuilder sbRtn = new StringBuilder();
sbRtn.Append("<Row>");
foreach (DataColumn dc in p_dt.Columns)
{
sbRtn.Append("<Cell><Data ss:Type=\"String\">");
sbRtn.Append(dc.ColumnName);
sbRtn.Append("</Data></Cell>\r\n");
}
sbRtn.Append("</Row>");
return sbRtn.ToString();
}
#region 用车报表 两行表头的
//added dengqian 201309016
private static string GetHeaderText_tworow(DataTable p_dt)
{
StringBuilder sbRtn = new StringBuilder();
StringBuilder partRtn = new StringBuilder();
sbRtn.Append("<Row>");
partRtn.Append("<Row>");
int rownum = 0;
foreach (DataColumn dc in p_dt.Columns)
{
if (rownum == 0)
{
sbRtn.Append("<Cell rowSpan='2'><Data ss:Type=\"String\">");
sbRtn.Append(dc.ColumnName);
sbRtn.Append("</Data></Cell>\r\n");
partRtn.Append("<Cell colSpan='3'><Data ss:Type=\"String\"></Data></Cell>\r\n");
}
else if (rownum > 0 && rownum <4)
{
if (rownum == 1)
{
sbRtn.Append("<Cell colSpan='3'><Data ss:Type=\"String\">短途用车(趟)</Data></Cell>\r\n");
}
else
{
sbRtn.Append("<Cell colSpan='3'><Data ss:Type=\"String\"></Data></Cell>\r\n");
}
partRtn.Append("<Cell><Data ss:Type=\"String\">");
partRtn.Append(dc.ColumnName);
partRtn.Append("</Data></Cell>\r\n");
//rownum += 3;
}
else if (rownum >3 && rownum <11)
{
if (rownum == 4)
{
sbRtn.Append("<Cell colSpan='7'><Data ss:Type=\"String\">长途用车(趟)</Data></Cell>\r\n");
}
else
{
sbRtn.Append("<Cell colSpan='3'><Data ss:Type=\"String\"></Data></Cell>\r\n");
}
partRtn.Append("<Cell><Data ss:Type=\"String\">");
partRtn.Append(dc.ColumnName);
partRtn.Append("</Data></Cell>\r\n");
//rownum += 7;
}
else
{
sbRtn.Append("<Cell rowSpan='2'><Data ss:Type=\"String\">");
sbRtn.Append(dc.ColumnName);
sbRtn.Append("</Data></Cell>\r\n");
}
rownum++;
}
sbRtn.Append("</Row>");
partRtn.Append("</Row>");
sbRtn.Append(partRtn);
return sbRtn.ToString();
}
#endregion
/// <summary>
/// Creates Excel Header
/// </summary>
/// <returns>Excel Header Strings</returns>
private static string ExcelHeader()
{
// Excel header
StringBuilder sb = new StringBuilder();
sb.Append("<?xml version=\"1.0\"?>\r\n");
sb.Append("<?mso-application progid=\"Excel.Sheet\"?>\r\n");
sb.Append("<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" ");
sb.Append("xmlns:o=\"urn:schemas-microsoft-com:office:office\" ");
sb.Append("xmlns:x=\"urn:schemas-microsoft-com:office:excel\" ");
sb.Append("xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\" ");
sb.Append("xmlns:html=\"http://www.w3.org/TR/REC-html40\">\r\n");
sb.Append("<DocumentProperties xmlns=\"urn:schemas-microsoft-com:office:office\">");
sb.Append("<Author></Author>");
sb.Append("</DocumentProperties>");
sb.Append("<ExcelWorkbook xmlns=\"urn:schemas-microsoft-com:office:excel\">\r\n");
sb.Append("<ProtectStructure>False</ProtectStructure>\r\n");
sb.Append("<ProtectWindows>False</ProtectWindows>\r\n");
sb.Append("</ExcelWorkbook>\r\n");
return sb.ToString();
}
private static string ExcelWorkSheetOptions()
{
// This is Required Only Once , But this has to go after the First Worksheet's First Table
StringBuilder sb = new StringBuilder();
sb.Append("\r\n<WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">\r\n<Selected/>\r\n </WorksheetOptions>\r\n");
return sb.ToString();
}
}
导出方法示例
DataSet ds=....;
OutExcelReport.DataSetToExcel(ds, filename, false, null, "");
不引用office动态库导出excel的更多相关文章
- C# Microsoft.Office.Interop.Owc11 导出excel文件
C# Microsoft.Office.Interop.Owc11 导出excel文件 1.新建项SupremeWindowsForms窗体应用项目(项目平台设置称X86) 注意:因为大多数第三方写的 ...
- C++ 动态库导出函数名“乱码”及解决
C++ 动态库导出函数名“乱码”及解决 刚接触C++,在尝试从 dll 中导出函数时,发现导出的函数名都“乱码”了. 导出过程如下: 新建一个Win32项目: 新建的解决方案里有几个导出的示例: // ...
- 【图文】[新手]C++ 动态库导出函数名“乱码”及解决
刚接触C++,在尝试从 dll 中导出函数时,发现导出的函数名都"乱码"了. 导出过程如下: 新建一个Win32项目: 新建的解决方案里有几个导出的示例: // 下列 ifdef ...
- 引用dll动态库,动态库中弹出对话框输入,将输入参数,作为变量继续调用。
在做支付项目时,引用动态库,动态库弹出支付宝或者微信的支付码,继而接收.最终将结果返回给调用动态库方法. 首先,动态库接收的是一个string 类型的xml,如 public string Pay(s ...
- 关于调用office com组件导出Excel
服务器环境: 环境为win2008 r2,系统为64位,程序是C#的winform.因为需要处理数据,然后生成Excel,耗时太长,就使用了多线程.winform程序是由计划任务启动,每天晚上去跑. ...
- GCC制作动态库导出符号表【转】
转自:https://blog.csdn.net/whb_fei/article/details/76974543 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...
- C# 关于调用office com组件导出Excel
服务器环境: 环境为win2008 r2,系统为64位,程序是C#的winform.因为需要处理数据,然后生成Excel,耗时太长,就使用了多线程.winform程序是由计划任务启动,每天晚上去跑. ...
- windows 动态库导出
以下内容来自博客:https://blog.csdn.net/fengbingchun/article/details/78825004 __declspec是Microsoft VC中专用的关键字, ...
- webform 不实用office控件导出excel StringBuilder 类型拼接字符串表格导出excel
StringBuilder sb = new StringBuilder(); sb.AppendLine("<meta http-equiv=\"Content-Type\ ...
随机推荐
- IOS开发之——类似微信摇一摇的功能实现
首先,一直以为摇一摇的功能实现好高大上,结果百度了.我自己也模仿写了一个demo.主要代码如下: 新建一个项目,名字为AnimationShake. 主要代码: - (void)motionBegan ...
- Jenkins入门系列之——00答疑解惑
写在最前的总结:Jenkins其实就是一个工具,这个工具的作用就是调用各种其他的工具来达成你的目的.比如你要获取Subversion上最新的源代码,Jenkins会去调用SVNKIT(插件的核心Jar ...
- Jenkins进阶系列之——11修改Jenkins用户的密码
说明:本方法仅适用于jdk6+.tomcat6+和Jenkins专有用户数据库的Jenkins! 很多童鞋在使用jenkins的时候忘记密码了,然后各种蛋疼.最近闲着无事,折腾了下.好了,闲话少扯. ...
- memcached 适用的场景
最近在看 memcached 的公共课,发现memcache的确是个好东西,可以显著地减小数据库负载,当然我们要搞清楚,任何一样技术都有它的优缺点, 在使用它的时候,搞清楚它的适用场景,才能扬长避短 ...
- 原生js dom记忆的内容
1.DOM基础getElementByIdgetElementByTagNamegetElementByName getElementsByClass querySelector querySelec ...
- T4模板在项目中的使用
建立T4模板方法:右键添加新项->文本模板 使用T4模板生成Dal层代码如下: <#@ template language="C#" debug="false ...
- java日期加减
1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()) ...
- iOS边练边学--Http网络再学习,简单介绍
一.URL 什么是URL URL中常见的协议 二.Http Http的基本通信过程 发送Http请求的方法 GET 和 POST 对比 GET 和 POST 的选择 三.iOS中的Http学习 iOS ...
- yii2URL美化
yii2的url 域名/index.php?r=site%2Findex 实际为 域名/index.php?r=site/index 可以美化下 可以在main.php中配置 'components' ...
- poj2774 后缀数组 求最长公共子串
Reference:IOI2009论文 http://www.cnblogs.com/ziyi--caolu/p/3192731.html #include "stdio.h" # ...