public string CreateExcel(string SelectedBizType, string strReportDate, DropDownList ddlYQ, DropDownList ddlDataTable, ref string strFilePath)
        {
            Application m_objExcel = new Application();
            int pid;
            GetWindowThreadProcessId(new IntPtr(m_objExcel.Hwnd), out pid);
            Workbooks m_objBooks = (Workbooks)m_objExcel.Workbooks;
            string strTepPath = string.Empty;
            string strTemplate = string.Empty;
            if (SelectedBizType == "3a448698-b695-4a5a-b405-df18f44da86f")
            {
                strTepPath = ConfigurationManager.AppSettings["TRQBBTemplate"];
                strTemplate = "天然气报表.xls";
            }
            else if (SelectedBizType == "969c388f-b0e2-4571-9876-4312b6a74a54")
            {
                strTepPath = ConfigurationManager.AppSettings["YCBBTemplate"];
                strTemplate = "油藏报表.xls";
            }
            try
            {
                string strFileDir = strTepPath + strReportDate + @"/";//将导出的excel保存到该路径下
                if (System.IO.Directory.Exists(strFileDir))//用来解决产能下载不稳定的问题
                {
                    System.IO.Directory.Delete(strFileDir, true);//如果由于上一次导出未成功,而留下了痕迹,先删除此文件夹,再创建
                }
                System.IO.Directory.CreateDirectory(strFileDir);//创建导出文件夹
                IDataBase oDB = DBFactory.GetDBInstance();

string strYQName = string.Empty;
                string strTemplateChild = string.Empty;
                //遍历油区
                for (int i = 0; i < ddlYQ.Items.Count; i++)
                {
                    strYQName = ddlYQ.Items[i].Text;
                    //遍历表
                    for (int j = 0; j < ddlDataTable.Items.Count; j++)
                    {
                        string strShortCode = string.Empty;
                        string strDtName = ddlDataTable.Items[j].Text;
                      strTemplateChild = "XXXXX.xls";
                     strShortCode = "XXXXXXXXXXXX";
                                             //查询业务表数据
                        string strSql = string.Format("select * from " + strShortCode + " where ny='{0}' and yq='{1}'", strReportDate.Substring(0, 6), strYQName);
                        System.Data.DataTable dtLast = oDB.GetDataTable(strSql);
                        if (dtLast.Rows.Count == 0)
                        {
                            continue;
                        }
                        _Workbook m_objBook = (_Workbook)m_objBooks.Add(strTepPath + strTemplateChild);
                        Sheets m_objSheets = (Sheets)m_objBook.Worksheets;
                        _Worksheet m_objSheet = (_Worksheet)(m_objSheets.get_Item(1));
                        //查询表结构字段
                        //                        string strSchama = string.Format(@"select column_name EnKey from user_tab_columns
                        //                                                                                            where upper(table_name)=upper('{0}')
                        //                                                                                            order by COLUMN_ID", strShortCode);
                        //                        System.Data.DataTable dtCols = oDB.GetDataTable(strSchama);
                        //                        string colNames = string.Empty;
                        //                        for (int k = 0; k < dtCols.Rows.Count; k++)
                        //                        {
                        //                            colNames += dtCols.Rows[k][0].ToString() + ",";
                        //                        }
                        //                        if (colNames.Length > 0)
                        //                        {
                        //                            colNames = colNames.Substring(0, colNames.Length - 1);
                        //                        }
                        //                        DownloadMutiRefineTable ddR = new DownloadMutiRefineTable();
                        //                        System.Data.DataTable dtResource = ddR.GetTableSchema(dtLast, colNames);
                        System.Data.DataTable dtResource = dtLast.Copy();
                        //将dataTable中的数据写入sheet
                        int headRows = m_objSheet.UsedRange.Rows.Count;
                        for (int k = 0; k < dtResource.Rows.Count; k++)
                        {
                            for (int m = 0; m < dtResource.Columns.Count; m++)
                            {
                                if (dtResource.Columns[m].ColumnName.ToUpper() == "STATUS")
                                {
                                    continue;
                                }
                                m_objSheet.Cells[k + headRows + 1, m + 1] = dtResource.Rows[k][m].ToString();
                            }
                        }
                        Range rCells = m_objSheet.Range[m_objSheet.Cells[headRows, 1],
                            m_objSheet.Cells[m_objSheet.UsedRange.Rows.Count, m_objSheet.UsedRange.Columns.Count]];  //shiying20140326 用来解决产能下载不稳定的问题
                        rCells.Borders.LineStyle = XlLineStyle.xlContinuous;
                        string save_path = strFileDir + ddlYQ.Items[i].Text + "_" + strReportDate + "_" + strTemplateChild;
                        m_objBook.SaveAs(save_path, XlFileFormat.xlXMLSpreadsheet, null, null, false, false,
                            XlSaveAsAccessMode.xlNoChange, null, null, null, null, null);
                        m_objBook.Close(false, null, null);
                    }
                }
                m_objBooks.Close();
                m_objExcel.Application.Quit();
                m_objExcel.Quit();

//将得到的excel打包
                Crc32 crc = new Crc32();
                strFilePath = strTepPath + strReportDate + strTemplate.Replace(".xls", ".zip");
                ZipOutputStream zos = new ZipOutputStream(File.Create(strFilePath));
                //zos.SetLevel(6);
                DirectoryInfo di = new DirectoryInfo(strFileDir);
                foreach (FileInfo item in di.GetFiles())
                {
                    FileStream fs = File.OpenRead(item.FullName);
                    byte[] buffer = new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    ZipEntry entry = new ZipEntry(strReportDate + strTemplate.Substring(0, strTemplate.Length - 4) + @"/" + item.Name);
                    entry.Size = fs.Length;
                    fs.Close();
                    crc.Reset();
                    crc.Update(buffer);
                    entry.Crc = crc.Value;
                    zos.PutNextEntry(entry);
                    zos.Write(buffer, 0, buffer.Length);
                }
                zos.Finish();
                zos.Close();
                System.IO.Directory.Delete(strFileDir, true);//删除导出文件夹             
            }
            catch (Exception err)
            {
                Message = err.Message;
            }
            return Message;
        }

excel 下载的更多相关文章

  1. Flex Excel下载

    最近做Flex里的Excel下载,用as3xls进行Excel导出后,Excel修改编辑后老出现:不能以当前格式保存...若要保存所做的更改,请单击“确定”,然后将其另存为最新的格式. 最后通过JAV ...

  2. DevExpress中GridView Excel下载

    DevExpress中GridView提供了许多Excel下载的方法,如gridView.ExportToExcelOld(sfdExcelDown.FileName); 在修改Bug时,遇到这样问题 ...

  3. ASP.NET Excel下载方法一览

    方法一 通过GridView(简评:方法比较简单,但是只适合生成格式简单的Excel,且无法保留VBA代码),页面无刷新 aspx.cs部分 using System; using System.Co ...

  4. JS JQuery 操作: Json转 Excel 下载文件

    方法的调用 var json = '[' + '{"申请流水号":"123456","保险公司":"测试数据",&quo ...

  5. 自己挖的坑自己填--jxl进行Excel下载堆内存溢出问题

    今天在进行使用 jxl 进行 Excel 下载时,由于数据量大(4万多条接近5万条数据的下载),数据结构过于负责,存在大量大对象(虽然在对象每次用完都设置为null,但还是存在内存溢出问题),加上本地 ...

  6. PHP Excel 下载数据,并分页下载

    直接上代码: 调用下载Excel: $total=$duoduo->count(MOD.' as a',$where); $objExcel= SelfExcelObject(); //导出 i ...

  7. SpringMVC生成Excel下载

    SpringMVC controller里的方法: @RequestMapping(value="/notify/download",produces = {"appli ...

  8. C# MVC 自定义ActionResult实现EXCEL下载

    前言 在WEB中,经常要使用到将数据转换成EXCEL,并进行下载.这里整理资料并封装了一个自定义ActionResult类,便于使用.如果文章对你有帮助,请点个赞. 话不多少,这里转换EXCEL使用的 ...

  9. 将页面内容转为Excel下载

    使用:method1(table); 说明:参数table为table元素的ID; var idTmr; function getExplorer() { var explorer = window. ...

随机推荐

  1. ORACLE网络配置大全没有比这个更详细的【weber出品】

    一.起篇 现在怎么说也是互联网时代,数据库也要联网,很多朋友学习Oracle的时候无外乎搭建的是以下两种学习环境: 1.直接在windows环境下安装Oracle后直接sqlplus连接. 2.在wi ...

  2. Microsoft Visual C++ 2005 SP1 Redistributable 安装错误

    1.在安装Microsoft Visual C++ 2005 SP1 Redistributable时报错:Command line option syntax error.Type Command ...

  3. ecmascript 的一些发展新动向

    ========== ecmascript 的一些发展新动向 (e5a57b27 - initial commit) 更弱.更受限 严格模式禁止 arguments.callee - 可以 " ...

  4. 万维网发布服务(w3svc)已停止,除非万维网发布服务(w3svc)正在运行。

    近来遇到一个IIS服务启动问题,重启服务器PC后,网站启动的时候,提示“ 万维网发布服务(w3svc)已停止,除非万维网发布服务(w3svc)正在运行”. 解决方法: 点击"开始" ...

  5. Python新手学习基础之运算符——位运算

    位运算符 位运算实际上是把数字看作二进制来进行计算,它的运算法则如下: 结合实例,来看下位运算是如何进行的吧: 位运算在实际应用中用途很广泛,比如我们经常听到的子网掩码,它其实就是和IP地址做了按位与 ...

  6. java 发送 http 请求

    public class VoteHandler implements IVoteHandler { private static final Logger LOGGER = LoggerFactor ...

  7. GO不支持数组通过函数参数更改,有点不一样

    package main import "fmt" func modify(array []int) { array[] = fmt.Println("In modify ...

  8. Keil C调试经验

    我们使用Keil C调试某系统时积累的一些经验:     1.由于Keil C对中文支持不太好,因而会出现显示的光标与光标实际所在不一致的现象,这会对修改中文注释造成影响.在Windows2000下面 ...

  9. Window Ghosting(仍可拖动失去响应的窗口,因为我们真正的窗口已经让系统用Ghosting窗口替代了。使用IsHungAppWindow 探测)

    最近工作中遇到Window Ghosting这个问题, 感觉挺有意思,这里简单记录下.     在XP时代我们的程序没有响应后只能通过任务管理器强制杀掉,但是Vista之后情况变了, 我们仍然可以拖动 ...

  10. github如何删除一个repository(仓库)

    昨天有人问我如何删除自己创建的一个项目,我浏览了一下github网站,确实不太容易找到删除功能.这里介绍一下啊如何在github上删除一个repository 一:首先点击进入你要删除的reposit ...