C#中导出EXCEL服务器端不用安装OFFICE
在实际开发过程中,有时候服务器端没安装OFFICE,你和服务器管理员去商量安装个OFFICE的时候,管理员很倔犟的不给你安装的时候,这个时候就可以考虑我这个方法是实现导出EXCEL了。如果你导出的EXCEL是OFFICE2003的版本,可以选择其它的方式实现了,如果是OFFICE 2003之后的版本,就选择这个比较好,如果大伙有更好的方法,可以提出来一起研究学习下。
第一步:在服务器上放一个空白的EXCEL文件,里面什么都没有,可以在你本机建好这个文件,然后将这个文件放到服务器上。
如图1:
第二步:调用复制文件的方法,将【如图1】的文件复制一份新的文件,文件名自己取,只要唯一就可以。
第三步:在第二步中复制出的文件中调用如下的方法建立列:
按照你的实际需求可以修改下面的这个方法的实现方式,下面只是一个参考作用。
- public static void ToExcel(string strPath, string strSheetName)
- {
- System.Data.OleDb.OleDbConnection OleDb_Conn = new System.Data.OleDb.OleDbConnection();
- // OleDb_Conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=No';" + "Data Source=\"" + strPath + "\"";
- 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);
- try
- {
- OleDb_Conn.Open();
- System.Data.OleDb.OleDbCommand OleDb_Comm = new System.Data.OleDb.OleDbCommand();
- OleDb_Comm.Connection = OleDb_Conn;
- string strCmd;
- try
- {
- strCmd = "drop table [" + strSheetName + "]";
- OleDb_Comm.CommandText = strCmd;
- OleDb_Comm.ExecuteNonQuery();
- }
- catch
- {
- }
- strCmd = "create Table [" + strSheetName + "](";
- //foreach (DataColumn dc in dtSource.Columns)
- //{
- strCmd += "[集] TEXT,"; //此处 TEXT 是为了 防止导出数据的长度大于255而导出异常
- strCmd += "[场] TEXT,";
- strCmd += "[镜头] TEXT,";
- strCmd += "[帧数] TEXT,";
- strCmd += "[制作人] TEXT,";
- strCmd += "[难度系数] TEXT,";
- strCmd += "[计划工时] TEXT,";
- strCmd += "[实际工时] TEXT,";
- strCmd += "[计划开始时间] TEXT,";
- strCmd += "[内部最晚通过时间] TEXT,";
- strCmd += "[备注] TEXT,";
- // }
- strCmd = strCmd.Trim().Substring(, strCmd.Length - );
- strCmd += ")";
- OleDb_Comm.CommandText = strCmd;
- OleDb_Comm.ExecuteNonQuery();
- OleDb_Conn.Close();
- }
- catch (Exception ex)
- {
- throw ex;
- }
- finally
- {
- OleDb_Conn.Close();
- }
- }
第四步:调用如下的方法把数据按照【第三步】生成的数据列的顺序写入到EXCEL中。
按照你的实际需求可以修改下面的这个方法的实现方式,下面只是一个参考作用。
- /// <summary>
- /// OLEDB导出EXCEL
- /// </summary>
- /// <param name="dtrows">数据源</param>
- /// <param name="filePath">写入的文件路径</param>
- /// <param name="fileName">写入的文件名</param>
- /// <param name="colunames">要显示的列数据</param>
- private void ExportExcelOLEDB(DataRow[] dtrows, string filePath, string fileName, string[] colunames)
- {
- clearFile();//清除产生的临时文件
- 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 档案只能用来做“写入”用途。
- // 当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
- // 当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。
- OleDbConnection con = new OleDbConnection(SqlConnStr);
- string tablename = ExcelSheetName(filePath);
- // string CommText = ""; //string.Format("INSERT INTO [" + tablename + "] VALUES(1,'elmer','password',1,'elmer','password',1,'elmer','password')");
- StringBuilder CommText = new StringBuilder();
- con.Open();
- try
- {
- int col = colunames.Length;
- foreach (DataRow dr in dtrows)
- {
- CommText.Append("INSERT INTO [" + tablename + "] VALUES(");
- for (int i = ; i < col; i++)
- {
- if (i + == col)
- {
- CommText.Append("'" + ReplaceAll(dr[colunames[i]].ToString()) + "'");
- }
- else
- {
- CommText.Append("'" + ReplaceAll(dr[colunames[i]].ToString()) + "',");
- }
- }
- CommText.Append(");");
- using (OleDbCommand cmd = new OleDbCommand(CommText.ToString().Replace(':', ';').TrimEnd(';'), con))
- {
- //导出数据
- cmd.ExecuteNonQuery();
- }
- CommText.Remove(, CommText.Length);
- }
- }
- catch (Exception err) { Response.Write(err.ToString()); con.Close(); }
- con.Close();
- ////向客户端发送文件...
- Response.Clear();
- Response.Charset = "GB2312";
- Response.ContentEncoding = System.Text.Encoding.UTF8;
- // 添加头信息,为"文件下载/另存为"对话框指定默认文件名
- Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(fileName) + ".xls");
- // 添加头信息,指定文件大小,让浏览器能够显示下载进度
- //Response.AddHeader("Content-Length", file.Length.ToString());
- // 指定返回的是一个不能被客户端读取的流,必须被下载
- Response.ContentType = "application/ms-excel";
- // 把文件流发送到客户端
- Response.WriteFile(filePath);
- Response.End();
- }
在实际应用中可以合并第三步和第四步,根据自己的实际需求可以组织自己的代码,这里只是提供了一个思路,希望大伙有意见提出来。。。。。。。
C#中导出EXCEL服务器端不用安装OFFICE的更多相关文章
- asp.net中导出Excel的方法
一.asp.net中导出Excel的方法: 本文转载 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出 ...
- 在vue中导出excel表格
初学者学习vue开发,想把前端项目中导出Excel表格,查了众多帖子,踩了很多坑,拿出来与大家分享一下经验. 安装依赖 //npm npm install file-saver -S npm inst ...
- 【转】js 中导出excel 较长数字串会变为科学计数法
[转]js 中导出excel 较长数字串会变成科学计数法 在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串 ...
- UpdatePanel 中 导出Excel按钮
UpdatePanel 中 导出Excel按钮 要加 Triggers </ContentTemplate> <Triggers> <asp:PostBackTrigge ...
- ASP.net中导出Excel的简单方法介绍
下面介绍一种ASP.net中导出Excel的简单方法 先上代码:前台代码如下(这是自己项目里面写的一点代码先贴出来吧) <div id="export" runat=&quo ...
- C# asp.net中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation
C# asp.net中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation 后台添加以下方法:/// <summa ...
- asp.net中导出excel数据的方法汇总
1.由dataset生成 代码如下 复制代码 public void CreateExcel(DataSet ds,string typeid,string FileName) { Htt ...
- vue中导出Excel表格
项目中我们可能会碰到导出Excel文件的需求,一般后台管理系统中居多,将table中展示的数据导出保存到本地.当然我们也可以通过一些处理来修改要导出的数据格式,具体需求具体对待. 1.首先我们需要安装 ...
- Asp.net中导出Excel文档(Gridview)
主要思路,通过GridView来导出文档. 新建一个Aspx页面,页面创建GridView控件,后台绑定好数据源.然后load中直接打印即可导出 前台的GridView <asp:GridVie ...
随机推荐
- POJ1050最大子矩阵面积
题目:http://poj.org/problem?id=1050 自己用了n^4的像暴搜一样的方法,感到有点奇怪——真的是这样? #include<iostream> #include& ...
- go http client, http server
Go语言中的HTTP client, server非常简单.具体如下. HTTP Server package main import ( "fmt" "html&quo ...
- phper必知必会之类库自动加载的七种方式(三)
## php自动加载 下面显示例子的文件目录结构图 一.没有使用命名空间的几种实现 test/oneClass.php class oneClass{ public function show(){ ...
- WPF Demo7
没有Path/Source的数据绑定 本地local资源用法 namespace Demo9 { public class Student { private string name; public ...
- BASIC-27_蓝桥杯_2n皇后问题
题目: 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一 ...
- 【Spring学习笔记-MVC-10】Spring MVC之数据校验
作者:ssslinppp 1.准备 这里我们采用Hibernate-validator来进行验证,Hibernate-validator实现了JSR-303验证框架支持注解风格的验证.首先 ...
- appiu 笔记
1.要在手机上输入字符, 要屏蔽手机键盘 于是可以想办法屏蔽软键盘,只需在desired_caps{}设置里面加两个参数 unicodeKeyboard是使用unicode编码方式发送字符串reset ...
- linux中uptime命令查看linux系统负载
阅读目录 uptime cat /proc/loadavg 何为系统负载呢? 进阶参考 uptime 另外还有一个参数 -V(大写),是用来查询版本的 [appdeploy@CNSZ22PL0088: ...
- 操作系统:Android(Google公司开发的操作系统)
ylbtech-操作系统:Android(Google公司开发的操作系统) Android是一种基于Linux的自由及开放源代码的操作系统.主要使用于移动设备,如智能手机和平板电脑,由Google(谷 ...
- [转]NSIS常用代码整理
转自 http://www.flighty.cn/html/bushu/20120827_156.html 这是一些常用的NSIS代码,少轻狂特意整理出来,方便大家随时查看使用.不定期更新哦~~~ ; ...