不引用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\ ...
随机推荐
- opencv3中的机器学习算法之:EM算法
不同于其它的机器学习模型,EM算法是一种非监督的学习算法,它的输入数据事先不需要进行标注.相反,该算法从给定的样本集中,能计算出高斯混和参数的最大似然估计.也能得到每个样本对应的标注值,类似于kmea ...
- 社交网站好友储存设计和实现(PHP+MySQL)
最近手头的一个网站新增社交功能,用户可以互加好友. 通常,对好友列表设计是新增一个好友,就往好友列表新增一行,当要查询一个用户好友 SELECT * FROM WHERE userid="1 ...
- word 2010自定义快捷键提高工作效率
经常使用word处理文档, 做笔记的时候会把word文档框缩小,以便同时看pdf同时记录笔记,但是缩小的word框不能把所有的菜单项显示出来,我比较常用那个插入边框下面的那个横线来做分割符,但是缩小了 ...
- Matlab的title如何实现换行显示?
怎么才能在'B Range'前面开始换行呢? title(['abc','L Range:',num2str(a),'(nm)','~~',num2str(b),'(cm)','B Range:',n ...
- 系统级I/O
Unix I/O 输入操作是从I/O设备拷贝数据到主存,而输出操作是从主存拷贝数据到I/O设备. 一个文件就是一个字节序列. 所有的I/O设备,如网络.磁盘.和终端,都被模型化为文件,而所有的输入和输 ...
- ANSI,UTF8等等这些格式
之前一直在纠结这些格式到底有什么区别,有时候因为格式的问题会让人抓狂. 下面通过实战来分析下: 下面在windows上建立一个txt文档.txt的优势是没有文件头,这样比较好分析. ANSI格式: 可 ...
- [MCSM]Exponential family: 指数分布族
Exponential family(指数分布族)是一个经常出现的概念,但是对其定义并不是特别的清晰,今天好好看了看WIKI上的内容,有了一个大致的了解,先和大家分享下.本文基本是WIKI上部分内容的 ...
- Android四大布局及其主要属性
布局: <LinearLayout></LinearLayout> <RelativeLayout></RelativeLayout> <Fram ...
- java并发:获取线程执行结果(Callable、Future、FutureTask)
初识Callable and Future 在编码时,我们可以通过继承Thread或是实现Runnable接口来创建线程,但是这两种方式都存在一个缺陷:在执行完任务之后无法获取执行结果.如果需要获取执 ...
- ajax请求模拟登录
前台 @if (Session["username"] != null) { <div class="login"> <span style= ...