大数据量,在线生成excel的解决方案,该怎么处理

大数据量,在线生成excel的解决方案
数据量10万级,需要在web上在线生成excel,从用户体验后台技术方案这两个角度,探讨一下应该如何解决,讨论思路即可,具体的转换代码手头已有,不过多讨论了,谢谢!
------解决思路----------------------
对Excel的导出, 稍有研究。 
如果数量不大(一万条以下), 随便怎么样都可以。

象你这样在十万条以上左右, 如果还要并发, 服务器绝对死掉 —— 一个用户导出就可能就占几个G的内存。 
NPOI和CloseXML导出都很占内存的。

如果数据并不复杂, 你可以试着导出 .CSV  文件。 
这样导出的文件并不大, 而且速度非常快, 下载时用户体验也很好。

------解决思路----------------------
引用:
excel单个工作表早就可以放160多万行了。而且一个工作簿可以放多个工作表。

多谢帮我更新知识点,我还停留在excel2003,嘿嘿
客户提这种要求其实是为了留个凭据(如果只是备份,我想客户不会关心你用什么方式的),万一数据库里的数据出现问题,用这个凭据去对照,如果是单表容量能达到160多万,那导出是没什么问题,不过接下来的问题是,用户可能会跟你提要求,要在excel里查找数据,对应上了,可能还要更新回数据库,这个情况我以前是碰到过,挺麻烦的
------解决思路----------------------
如上面所言,就是把10w级的数据导出到Excel文件(当然是.xlsx)而已。
因为web网页是对于所有公众开放的,随意访问的,那实时生成Excel就不是好办法了,每次访问页面都执行一次导出,这是严重的设计错误啊,除非附加了动态的筛选条件的,否则都应该后台导出,然后提供URL下载。

我只坐过剪切板copy方式导出Excel,是COM组件实现的。
Oracle+winform。

查询数据-创建COM示例-创建工作表-打开sheet-复制粘贴数据-保存xlsx-释放COM资源-返回。
12个字段,6w行,20秒左右。xlsx文件大小约5MB

  /// <summary>
        /// 使用粘贴板进行写入
        /// 此函数需要依赖office实例,运行的OS要安装office
        /// </summary>
        /// <param name="data"></param>
        /// <param name="filename"></param>
        /// <param name="exportHeader"></param>
        public void Export2Xls(DataTable data, string filename, bool exportHeader = true)
        {
            if (System.IO.File.Exists(filename))
                System.IO.File.Delete(filename);

            Excel14._Application xlsApp = null;
            Excel14._Workbook xlsBook = null;
            Excel14._Worksheet xstSheet = null;
            try
            {
                //xlsApp = new Excel14.ApplicationClass();
                //xlsApp = new Excel14.Application();

                xlsApp = new Excel14.Application();

                xlsBook = xlsApp.Workbooks.Add();
                xstSheet = (Excel14._Worksheet)xlsBook.Worksheets[1];

                var buffer = new StringBuilder();
                if (exportHeader)
                {
                    // Excel中列与列之间按照Tab隔开
                    foreach (DataColumn col in data.Columns)
                        buffer.Append(col.ColumnName + "\t");

                    buffer.AppendLine();
                }
                foreach (DataRow row in data.Rows)
                {
                    foreach (DataColumn col in data.Columns)
                        buffer.Append(row[col].ToString() + "\t");

                    buffer.AppendLine();
                }
                System.Windows.Forms.Clipboard.SetDataObject("");
                // 放入剪切板
                System.Windows.Forms.Clipboard.SetDataObject(buffer.ToString());
                var range = (Excel14.Range)xstSheet.Cells[1, 1];
                range.Select();
                xstSheet.Paste();
                // 清空剪切板
                System.Windows.Forms.Clipboard.SetDataObject("");

                xlsBook.SaveAs(filename);
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                try
                {
                    if (xlsBook != null)
                        xlsBook.Close();

                    if (xlsApp != null)
                        xlsApp.Quit();

                    // finally里清空Com对象
                    lock(this)
                    {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(xstSheet);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsBook);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsApp);

                    xstSheet = null;
                    xlsBook = null;
                    xlsApp = null;

                    GC.Collect();  
                    }

                }
                catch (System.Exception ex)
                {
                    throw ex;
                }

            }
        }


------解决思路----------------------
对,大数据量操作excel不太可以去,需要查看,你让他在线查看不就得了,按时间段查询,按时间段导出
用NPOI操作,服务器不用安装office
------解决思路----------------------
十万级别的excel用POI轻松搞定的。很多时候,不是程序员说什么就什么的,客户有很多愚蠢的要求,你没办法的..................