不引用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" # ... 
