zoukankan      html  css  js  c++  java
  • asp.net excel 选择文件夹 批量导出

     在客户端(非服务端) ,选择本地文件夹,一次导出多个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、点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加

  • 相关阅读:
    Android桌面快捷方式的实现
    Java之currenHashMap
    windows 2003 配置邮件服务器 hMailServer+squirrelmail
    bat脚本 cmd 命令
    强制客户端更新Silverlight XAP文件方法汇总(转)
    Silverlight 常用StringFormat格式总结(转)
    Excel 操作 DLL
    silverlight 开发软件列表
    通用错误处理
    use XSD.exe in VS2010 from a xsd file to class
  • 原文地址:https://www.cnblogs.com/shiworkyue/p/3845326.html
Copyright © 2011-2022 走看看