asp.net excel 选择文件夹 批量导出

简介: 在客户端(非服务端) ,选择本地文件夹,一次导出多个excel。 前台:        导出excel function browseFolder(path) { try { ...

 在客户端(非服务端) ,选择本地文件夹,一次导出多个excel。


前台:

 
    

<div>
      <asp:LinkButton class="linktext" id="lnbExcel" runat="server" onclick="lnbExcel_Click" >
      导出excel</asp:LinkButton>
    </div>
      <script>
    function browseFolder(path) {


    try {


        var Message = "\u8bf7\u9009\u62e9\u6587\u4ef6\u5939"; //选择框提示信息


        var Shell = new ActiveXObject("Shell.Application");


        var Folder = Shell.BrowseForFolder(0, Message, 64, 17); //起始目录为:我的电脑


        //var Folder = Shell.BrowseForFolder(0, Message, 0); //起始目录为:桌面


        if (Folder != null) {


            Folder = Folder.items(); // 返回 FolderItems 对象


            Folder = Folder.item(); // 返回 Folderitem 对象


            Folder = Folder.Path; // 返回路径


            if (Folder.charAt(Folder.length - 1) != "\\") {


                Folder = Folder + "\\";
            }
            document.getElementById(path).value = Folder;


            return Folder;


        }


    }


    catch (e) {


        alert(e.message);


    }


}
 </script>
<table>


  <tr>


    <td>选择导入数据源:</td>


    <td><asp:TextBox ID="path"
            runat="server"></asp:TextBox></td>


    <td><input type=button value="选择" onclick="browseFolder('path')"></td>


  </tr>


</table>


后台 


 //导出EXCEL
        protected void lnbExcel_Click(object sender, EventArgs e)
        {
            #region dataTable导出到excel 弹出保存对话框
            for (int i = 0; i < 2; i++)
            {
                string saveFileName = path.Text + i;


                int rowIndex = 1;      //开始写入数据的单元格行
                int colIndex = 0;      //开始写入数据的单元格列
                System.Reflection.Missing miss = System.Reflection.Missing.Value;
                Microsoft.Office.Interop.Excel.Application mExcel = new Microsoft.Office.Interop.Excel.Application();
                mExcel.Visible = false;
                Microsoft.Office.Interop.Excel.Workbooks mBooks = (Microsoft.Office.Interop.Excel.Workbooks)mExcel.Workbooks;
                Microsoft.Office.Interop.Excel.Workbook mBook = (Microsoft.Office.Interop.Excel.Workbook)(mBooks.Add(miss));
                Microsoft.Office.Interop.Excel.Worksheet mSheet = (Microsoft.Office.Interop.Excel.Worksheet)mBook.ActiveSheet;
                //Microsoft.Office.Interop.Excel.Range er = mSheet.get_Range((object)"A1", System.Reflection.Missing.Value); //向Excel文件中写入标题文本
                //er.Value2 = fileName.Substring(0, fileName.LastIndexOf('.'));
                try
                {
                    colIndex++;
                    mSheet.Cells[1, colIndex] = "列1";//输出DataGridView列头名   




                    rowIndex++;
                    colIndex = 0;
                    colIndex++;
                    mSheet.Cells[rowIndex, colIndex] = "'" + "支部到";






                    //获取你使用的excel 的版本号
                    string _strVersion = mExcel.Version;
                    int FormatNum = 0x00;
                    if (Convert.ToDouble(_strVersion) < 12)//You use Excel 97-2003
                    {


                        FormatNum = -4143;


                    }


                    else//you use excel 2007 or later
                    {


                        FormatNum = 56;
                    }


                    //保存工作已写入数据的工作表
                    mBook.SaveAs(saveFileName, FormatNum, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss, miss);


                    //mBook.SaveAs(saveFileName, FormatNum, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss, miss);
                }
                catch (Exception ee)
                {
                    throw new Exception(ee.Message);
                }
                            finally    //finally中的代码主要用来释放内存和中止进程()
                {
                    mBook.Close(true, miss, miss);
                    mBooks.Close();
                    mExcel.Quit();
                    //System.Runtime.InteropServices.Marshal.ReleaseComObject(er);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(mSheet);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(mBook);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(mBooks);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(mExcel);
                    GC.Collect();
                }
            }
            #endregion


命名空间  using Microsoft.Office.Interop.Excel;


IE测试通过。在文件名冲突时可能报其他错误。


另,在可能受服务端excel配置影响报一下错误:

 

  检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))。 
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.UnauthorizedAccessException: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))。  (部分)...


 

 

附加决解方案连接 http://blog.csdn.net/zijings8374/article/details/4256005 (未测试 0..0)


 

检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败

在项目中将数据导出为Excel格式时出现“检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005”,从网上搜了一下有如下解决方案:

 

1:在服务器上安装office的Excel软件.

2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"

3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"

4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框

5:点击"标识"标签,选择"交互式用户"

6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加

一个"ASP.net"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.

7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"ASP.net"用户,然后赋予"本地访问"权限.

这样,我们便配置好了相应的Excel的DCOM权限.

注意:这是在WINxp上配置的,在2003上,ASP.net用户改为NETWORK SERVICE用户。

 

根据上述操作了一遍,结果还是这个错误,后来在组件服务中又将“Microsoft Office Excel 预览器”配置了一遍才解决问题,配置过程如下:

1、在"DCOM配置"中找到"Microsoft Office Excel 预览器",在它上面点击右键,然后点击"属性",弹出"Microsoft Office Excel 预览器属性"对话框

 

2、点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加

 

 

 

目录
相关文章
|
9月前
|
监控 数据处理 索引
使用Python批量实现文件夹下所有Excel文件的第二张表合并
使用Python和pandas批量合并文件夹中所有Excel文件的第二张表,通过os库遍历文件,pandas的read_excel读取表,concat函数合并数据。主要步骤包括:1) 遍历获取Excel文件,2) 读取第二张表,3) 合并所有表格,最后将结果保存为新的Excel文件。注意文件路径、表格结构一致性及异常处理。可扩展为动态指定合并表、优化性能、日志记录等功能。适合数据处理初学者提升自动化处理技能。
208 1
|
开发框架 算法 .NET
一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel
一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel
188 0
|
6月前
|
开发框架 .NET API
分享一个 ASP.NET Web Api 上传和读取 Excel的方案
分享一个 ASP.NET Web Api 上传和读取 Excel的方案
173 0
|
7月前
|
存储 对象存储 Python
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
|
缓存 开发框架 算法
.NET操作Excel高效低内存的开源框架 - MiniExcel
.NET操作Excel高效低内存的开源框架 - MiniExcel
180 0
.NET操作Excel高效低内存的开源框架 - MiniExcel
.NET NPOI导出时间、公式等格式化
.NET NPOI导出时间、公式等格式化
121 0
.NET NPOI导出时间、公式等格式化
|
C#
.net NPOI Excel导入:时间格式2022/5/26导入变成26-5月-2022
​ 1、问题由来 在做一个导入的需求时,测试导入模板,无论导入模板里的日期设置成何种日期格式到代码中都会提示有不正确的格式化数据,加断点调试发现,导入的日期如:Excel表格中是2022/5/26,断点看到的却是26-5月-2022。 2、解决方案 网上查询了几种解决方案,有导入的数据列格式判断转换,日期格式强转等等,都没什么效果,最后解决的方法如下: // NPOI导入日期格式处理 string mytime = dateStr.Trim(); // dateStr为Excel导入的日期值 IFormatProvider culture = new CultureInfo("zh-CN"
112 0
|
C#
.net 数据导出
.net 数据导出
68 0
|
数据库 C#
C#,.net,winform导入Excel功能以及下载Excel文件到本地,并使用SqlBulkCopy把DataTable类型的数据写入到sqlserver数据库中
C#,.net,winform导入Excel功能以及下载Excel文件到本地,并使用SqlBulkCopy把DataTable类型的数据写入到sqlserver数据库中
72 0
|
BI C++
用vb.net 导出word
上回借机房收费系统讲到了用vb.net导出Excel,这次在做项目的过程中,我们不仅学会了将数据打印到VS自带的报表中,还了解了如何用vb.net操作word,将窗体中的内容反映到word中。所以今天要向大家分享一下如何用VB.net 导出word,生成word报表。 第一步,添加引用:
197 0

热门文章

最新文章