zoukankan      html  css  js  c++  java
  • 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         }

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

       

  • 相关阅读:
    数组排序与二维数组
    函数-头文件//Calculator.h
    [hiho1586]Minimum
    后缀数组模板整理
    [spoj694&spoj705]New Distinct Substrings(后缀数组)
    [poj3261]Milk Patterns(后缀数组)
    [poj3450]Corporate Identity(后缀数组)
    [poj1236]Network of Schools(targin缩点SCC)
    [hdu2087]剪花布条(KMP)
    [hdu2594]Simpsons’ Hidden Talents
  • 原文地址:https://www.cnblogs.com/huaan011/p/3584056.html
Copyright © 2011-2022 走看看