Web常用工具 二维码美化 在线压缩 JavaScript AI工具汇总网站 ASP.NET控件源码查询 W3CHTML W3SCHOOL 开源中国 51aspx github codeproject SQLBACKUP 几种排序算法比较 SQL中deny权限 MSDN下载 HttpWebRequest类 HTML5 stackoverflow ASP.NET 页生命周期概述 IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述 [SQL Server]视图sys.sysprocesses brnshop学习 SQL视频 Fiddler帮助文档 Sprint.Net SQLServer牛人博客 codeplex IIS官网 IE11 Developer Jquery源码视频上 Jquery源码视频下 Jquery Bugs jquery.miaov.com 正则表达式 Jquery API 1.9 Service Broker Javascript Object中的方法讲解 Microsoft webcast 微信开发接口 ECMAScript5 Underscore Jquery Bugs SQL存储过程事务嵌套 官网SQL事务锁 2345天气插件 Json数据查看 C++ jquery-plugin-validate 博学谷(传智播客) Swift视频 IOS代码论坛 SWIFT设计模式 操作系统下载 AngularJS VueJS ASPNETCORE 前端题库 Node.js ASPNETCORE 腾讯课堂 SwiftUI SwiftUI疑问解答 ADO.NET SMO 数字化企业网 Unicode码查询 Redis使用文档 .NET 微服务:适用于容器化 .NET 应用程序的体系结构 .NETCore5.0微软官方文档 CSS3.0 在 ASP.NET Core 中配置 Windows 身份验证 Maven使用教程 Maven Repository Thymeleaf Thymeleaf中文CSDN Spring官方文档 Spring中文文档 SpringBoot SpringData SVG在线设计工具 SVG教程01 SVG教程02 fontawesome图标库 mybatis官网 mybatis-spring中文 mysql教程 python教程 python的scrapy教程01 python的scrapy教程02 VS开发python xpath教程 腾讯向量数据库教程 JSZip浏览器内存中创建文件与文件夹 axios的使用文档 SheetJS(JS操作excel)的使用文档

huaan011

 

C#中导出EXCEL服务器端不用安装OFFICE

  在实际开发过程中,有时候服务器端没安装OFFICE,你和服务器管理员去商量安装个OFFICE的时候,管理员很倔犟的不给你安装的时候,这个时候就可以考虑我这个方法是实现导出EXCEL了。如果你导出的EXCEL是OFFICE2003的版本,可以选择其它的方式实现了,如果是OFFICE 2003之后的版本,就选择这个比较好,如果大伙有更好的方法,可以提出来一起研究学习下。

  第一步:在服务器上放一个空白的EXCEL文件,里面什么都没有,可以在你本机建好这个文件,然后将这个文件放到服务器上。

          如图1:

    第二步:调用复制文件的方法,将【如图1】的文件复制一份新的文件,文件名自己取,只要唯一就可以。

  第三步:在第二步中复制出的文件中调用如下的方法建立列:

     按照你的实际需求可以修改下面的这个方法的实现方式,下面只是一个参考作用。

 1 public static void ToExcel(string strPath, string strSheetName)
 2        {
 3            System.Data.OleDb.OleDbConnection OleDb_Conn = new System.Data.OleDb.OleDbConnection();
 4           // OleDb_Conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=No';" + "Data Source=\"" + strPath + "\"";
 5            OleDb_Conn.ConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=0\"", strPath);
 6            try
 7            {
 8                OleDb_Conn.Open();
 9                System.Data.OleDb.OleDbCommand OleDb_Comm = new System.Data.OleDb.OleDbCommand();
10                OleDb_Comm.Connection = OleDb_Conn;
11                string strCmd;
12                try
13                {
14                    strCmd = "drop table [" + strSheetName + "]";
15                    OleDb_Comm.CommandText = strCmd;
16                    OleDb_Comm.ExecuteNonQuery();
17                }
18                catch
19                {
20 
21                }
22                strCmd = "create Table [" + strSheetName + "](";
23 
24                //foreach (DataColumn dc in dtSource.Columns)
25                //{
26                strCmd += "[集] TEXT,"; //此处 TEXT 是为了 防止导出数据的长度大于255而导出异常
27                strCmd += "[场] TEXT,";
28                strCmd += "[镜头] TEXT,";
29                strCmd += "[帧数] TEXT,";
30                strCmd += "[制作人] TEXT,";
31                strCmd += "[难度系数] TEXT,";
32                strCmd += "[计划工时] TEXT,";
33                strCmd += "[实际工时] TEXT,";
34                strCmd += "[计划开始时间] TEXT,";
35                strCmd += "[内部最晚通过时间] TEXT,";
36                strCmd += "[备注] TEXT,";
37               // }
38 
39                strCmd = strCmd.Trim().Substring(0, strCmd.Length - 1);
40                strCmd += ")";
41                OleDb_Comm.CommandText = strCmd;
42                OleDb_Comm.ExecuteNonQuery();
43                
44                OleDb_Conn.Close();
45            }
46            catch (Exception ex)
47            {
48                throw ex;
49            }
50            finally
51            {
52                OleDb_Conn.Close();
53            }
54        }

   第四步:调用如下的方法把数据按照【第三步】生成的数据列的顺序写入到EXCEL中。

      按照你的实际需求可以修改下面的这个方法的实现方式,下面只是一个参考作用。

 1 /// <summary>
 2         /// OLEDB导出EXCEL
 3         /// </summary>
 4         /// <param name="dtrows">数据源</param>
 5         /// <param name="filePath">写入的文件路径</param>
 6         /// <param name="fileName">写入的文件名</param>
 7         /// <param name="colunames">要显示的列数据</param>
 8         private void ExportExcelOLEDB(DataRow[] dtrows, string filePath, string fileName, string[] colunames)
 9         {
10             clearFile();//清除产生的临时文件
11             string SqlConnStr = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=0\"", filePath); //  当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。
12             //  当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
13             //  当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。
14             OleDbConnection con = new OleDbConnection(SqlConnStr);
15             string tablename = ExcelSheetName(filePath);
16             // string CommText = ""; //string.Format("INSERT INTO [" + tablename + "] VALUES(1,'elmer','password',1,'elmer','password',1,'elmer','password')");
17             StringBuilder CommText = new StringBuilder();
18 
19             con.Open();
20             try
21             {
22                 int col = colunames.Length;
23                 foreach (DataRow dr in dtrows)
24                 {
25                     CommText.Append("INSERT INTO [" + tablename + "] VALUES(");
26                     for (int i = 0; i < col; i++)
27                     {
28                         if (i + 1 == col)
29                         {
30                             CommText.Append("'" + ReplaceAll(dr[colunames[i]].ToString()) + "'");
31                         }
32                         else
33                         {
34                             CommText.Append("'" + ReplaceAll(dr[colunames[i]].ToString()) + "',");
35                         }
36                     }
37                     CommText.Append(");");
38 
39                     using (OleDbCommand cmd = new OleDbCommand(CommText.ToString().Replace(':', ';').TrimEnd(';'), con))
40                     {
41 
42                         //导出数据
43                         cmd.ExecuteNonQuery();
44 
45                     }
46                     CommText.Remove(0, CommText.Length);
47                 }
48             }
49             catch (Exception err) { Response.Write(err.ToString()); con.Close(); }
50             con.Close();
51             ////向客户端发送文件...
52             Response.Clear();
53             Response.Charset = "GB2312";
54             Response.ContentEncoding = System.Text.Encoding.UTF8;
55             // 添加头信息,为"文件下载/另存为"对话框指定默认文件名   
56             Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(fileName) + ".xls");
57             // 添加头信息,指定文件大小,让浏览器能够显示下载进度   
58             //Response.AddHeader("Content-Length", file.Length.ToString());
59             // 指定返回的是一个不能被客户端读取的流,必须被下载   
60             Response.ContentType = "application/ms-excel";
61             // 把文件流发送到客户端   
62             Response.WriteFile(filePath);
63             Response.End();
64         }

    在实际应用中可以合并第三步和第四步,根据自己的实际需求可以组织自己的代码,这里只是提供了一个思路,希望大伙有意见提出来。。。。。。。

   

posted on 2014-03-06 11:09  华安  阅读(4841)  评论(2编辑  收藏  举报

导航