一个高效的导出Excel方法,并且已解决导出会有样式文件夹的问题

这是导出Excel的其中一种方法,由于这个是将字符串(html中的<table></table>)直接写到Excel文件中的,所以相对来说比较高效。但是,在用的时候有这样一个问题

当导出来后保存的时候,会同时出现一个.files的文件夹,这里主要也就是解决了这个问题,不多说了,贴代码:

   public static string ExportExcel(DataTable dt)
        {
            string downLoadPagePath = "";
            try
            {
                int iCounter = 0;

                string now = DateTime.Now.ToString("yyyyMMddhhmmssfff");

                string sFileNewName = DateTime.Now.ToString("yyyyMM") + "\\" + now;

                //获取绝对目录
                string downLoadPath = System.Web.Hosting.HostingEnvironment.MapPath("\\") + @"\FileDownLoad\" + DateTime.Now.ToString("yyyyMM");

                //确定是否有文件目录,没有就添加
                if (!System.IO.Directory.Exists(downLoadPath))
                {
                    System.IO.DirectoryInfo di = System.IO.Directory.CreateDirectory(downLoadPath);
                }
                string sMapPath = downLoadPath + "\\" + now + ".xls";
                //下载文件时使用的路径
                string ServerPath = @"\FileDownLoad\" + DateTime.Now.ToString("yyyyMM") + "\\" + now + ".xls";
                #region MyRegion
                //表标题

                System.Text.StringBuilder sb = new StringBuilder();
                sb.Append("<html xmlns:x='urn:schemas-microsoft-com:office:excel'>");
                sb.Append("<head>");
                sb.Append(@"<!--[if gte mso 9]><xml>
                                        <x:ExcelWorkbook>
                                            <x:ExcelWorksheets>
                                                <x:ExcelWorksheet>
                                                    <x:Name>Sheet1</x:Name>
                                                    <x:WorksheetOptions>
                                                        <x:Print>
                                                            <x:ValidPrinterInfo />
                                                        </x:Print>
                                                    </x:WorksheetOptions>
                                                </x:ExcelWorksheet>
                                            </x:ExcelWorksheets>
                                        </x:ExcelWorkbook>
                                    </xml>
                                    <![endif]-->");
                sb.Append("</head>");
                //--------------------------------------------------------------------------------------------------
                sb.Append("<body>");
                sb.Append(BuildTable(dt));
                sb.Append("</body></html>");

                //生成html文件
                //string abcd = sb.ToString();
                if (File.Exists(sMapPath))
                {
                    File.Delete(sMapPath);
                }
                FileStream fs = new FileStream(sMapPath, FileMode.Create);
                StreamWriter sw = new StreamWriter(fs, Encoding.UTF8);
                sw.Write(sb.ToString());
                fs.Flush();
                sw.Close();
                fs.Close();
                #endregion

                #region 打开一下这个Excel,然后另存一个位置,这样来解决保存时样式的问题
                //空对象,下面会用到。
                object missing = System.Reflection.Missing.Value;
                //创建对象
                Microsoft.Office.Interop.Excel.Application Myexcel = new Microsoft.Office.Interop.Excel.ApplicationClass();//注意这里,需要将Microsoft.Office.Interop.Excel这个引用的“嵌入互操作类型”的值为false
                //打开源excel,用到了上面的missing
                Microsoft.Office.Interop.Excel._Workbook xBk = Myexcel.Workbooks._Open(sMapPath, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
                Microsoft.Office.Interop.Excel._Worksheet xSt = (Microsoft.Office.Interop.Excel._Worksheet)xBk.Worksheets[1];//读取第一个Sheet

                string saveAsPath = System.Web.Hosting.HostingEnvironment.MapPath("\\") + @"FileDownLoadSaveAs\" + DateTime.Now.ToString("yyyyMM") + "\\";
                if (!Directory.Exists(saveAsPath))
                    Directory.CreateDirectory(saveAsPath);
                string saveAsFileName = now + ".xls";
                string saveAsFullPath = saveAsPath + saveAsFileName;
                string saveAsServerPath = @"
\\FileDownLoadSaveAs\\" + DateTime.Now.ToString("yyyyMM") + "\\" + now + ".xls";
                xBk.SaveAs(saveAsFullPath, missing, missing, missing, missing, missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, missing, missing, missing, missing, false);

                Myexcel.Quit();
                xBk = null;
                Myexcel = null;
                #endregion
                downLoadPagePath = "DownLoadPage.aspx?filepath=" + saveAsServerPath;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                Process[] procs = Process.GetProcessesByName("excel");
                foreach (Process pro in procs)
                {
                    pro.Kill();//杀掉进程
                }
                GC.Collect();
            }
            return downLoadPagePath;
        }

        private static string BuildTable(DataTable dt)
        {
            StringBuilder sb = new StringBuilder("<table>");
            sb.Append("<tr>");
            //表头
            foreach (DataColumn column in dt.Columns)
            {
                sb.Append("<td>" + column.ColumnName + "</td>");
            }
            sb.Append("</tr>");

            //表内容
            foreach (DataRow row in dt.Rows)
            {
                sb.Append("<tr>");
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    sb.Append("<td>" + row[i].ToString() + "</td>");
                }
                sb.Append("</tr>");
            }

            sb.Append("</table>");
            return sb.ToString();
        }

 

 

 

下面附加C#操作Excel SaveAS方法参数详解,这个转自http://www.deyangdianzi.com/zblog/post/%E7%BC%96%E7%A8%8B%E5%A4%A9%E5%9C%B0/C-CaoZuoExcel-SaveASFangFaCanShuXiangJie.html

C#操作Excel用的SaveAS方法参数详解:
ExcelApplication.WorkBook.SaveAs(filename,FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodePage, TextVisualLayout ,Local)
1、Filename: Variant 类型,可选。该字符串表示要保存的文件名。可包含完整路径。如果不指定路径,Microsoft Excel 将文件保存到当前文件夹中。
2、FileFormat: Variant 类型,可选。保存文件时使用的文件格式。要得到有效选项的列表,请参阅 FileFormat 属性。对于已有文件,其默认格式是上次指定的文件格式;对于新文件,默认格式为当前使用的 Excel 版本格式 ,可选常数如下:


xlAddIn 18
xlCSV 6
xlCSVMac 22
xlCSVMSDOS 24
xlCSVWindows 23
xlCurrentPlatformText -4158
xlDBF2 7
xlDBF3 8
xlDBF4 11
xlDIF 9
xlExcel2 16
xlExcel2FarEast 27
xlExcel3 29
xlExcel4 33
xlExcel4Workbook 35
xlExcel5 39
xlExcel7 39
xlExcel9795 43
xlHtml 44
xlIntlAddIn 26
xlIntlMacro 25
xlSYLK 2
xlTemplate 17
xlTextMac 19
xlTextMSDOS 21
xlTextPrinter 36
xlTextWindows 20
xlUnicodeText 42
xlWebArchive 45
xlWJ2WD1 14
xlWJ3 40
xlWJ3FJ3 41
xlWK1 5
xlWK1ALL 31
xlWK1FMT 30
xlWK3 15
xlWK3FM3 32
xlWK4 38
xlWKS 4
xlWorkbookNormal -4143
xlWorks2FarEast 28
xlWQ1 34
xlXMLData 47
xlXMLSpreadsheet 46


3、Password :Variant 类型,可选。它是一个区分大小写的字符串(最长不超过 15 个字符),用于指定文件的保护密码。
4、WriteResPassword :Variant 类型,可选。该字符串表示文件的写保护密码。如果文件保存时带有密码,但打开文件时不输入密码,则该文件以只读方式打开。
5、ReadOnlyRecommended : Variant 类型,可选。如果该值为 True,则在打开文件时显示一条信息,提示该文件以只读方式打开。
6、CreateBackup: Variant 类型,可选。如果该值为 True,则创建备份文件。
7、AccessMode :XlSaveAsAccessMode 类型,可选,如果省略此参数,则不会更改访问方式。如果在没有改变文件名的情况下保存共享列表,则可以忽略参数。若要改变访问方式,请使用 ExclusiveAccess 方法。 以下是可选常量:


xlExclusive 3 不含方式
xlNoChange 1 不更改访问方式,缺省值
xlShared 2 共享列表


8、ConflictResolution : XlSaveConflictResolution 类型,如果忽略本参数,则显示冲突处理对话框。可选常量如下:


xlLocalSessionChanges 2 自动接受本地用户的修改
xlOtherSessionChanges 3 接受除本地用户之外的其他用户的更改
xlUserResolution 1 显示冲突解决方案对话框


9、AddToMru :Variant 类型,可选。如果该值为 True ,则将该工作簿添加到最近使用的文件列表中。默认值为 False。
10、TextCodePage :Variant 类型,可选。不在美国英语版的 Microsoft Excel 中使用。
11、TextVisualLayout :Variant 类型,可选。不在美国英语版的 Microsoft Excel 中使用。
12、Local :Variant 类型,可选。如果该值为 True,则以 Microsoft Excel(包括控制面板设置)的语言保存文件。如果该值为 False(默认值),则以 Visual Basic for Applications (VBA) 的语言保存文件,其中 Visual Basic for Applications (VBA) 为典型安装的美国英语版本,除非 VBA 项目中的 Workbooks.Open 来自旧的国际化的 XL5/95 VBA 项目

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值