解决方案 »

  1.   

    http://bbs.csdn.net/topics/390670824http://bbs.csdn.net/topics/390697684
      

  2.   

    既然你都用nopi了..道理来说不能啊..你说的卡 是有多卡...
      

  3.   

    我正在做一个项目,SQL对数据进行检索后先放入一个 dt
    通过nopi直接将DT直接转换为EXCEL文件,速度比较快,因为DT就是在内存里面的临时表
    NOPI要用2.4以上版本的,有这个功能
    其实,EXCEL文件有缺陷,记录行超过5W多,老版本就不支持了。
    另一种思路,用文件流方式,将DT直接写成CVS文件进行保存,EXCEL也可以直接打开,我试过每秒写个几万条记录不成问题的
      

  4.   

    for (int j = 0; j < 4; j++)
    只有3列,为什么循环4次,后面加个空单元格?
    还有,处理数据和导出的过程最好分开,尽量不要一次执行太复杂的逻辑
    导出前在别的地方把数据处理好,直接导出
      

  5.   

    lz 如果不要是格式,就使用流导出。
    发个链接,
    http://blog.csdn.net/duanzi_peng/article/details/17414629
      

  6.   

    如果可以接受xml格式的excel的话,是个不错的选项,速度足够快,不调用任何组件。以XML形式的Excel方式(可以设置丰富的样式,并可以有多个sheet,但需要模版。速度很快,但生成的文件较大,且无法保留VBA代码)
      

  7.   

    批量导出Excel文件到指定数据库
    //导出按钮事件
    private void btn_Export_Click(object sender, EventArgs e)
            {
                string[] P_str_Names = txt_Path.Text.Split(',');//存储所有选择的Excel文件名
                string P_str_Name = "";//存储遍历到的Excel文件名
                List<string> P_list_SheetNames = new List<string>();//实例化泛型集合对象,用来存储工作表名称
                for (int i = 0; i < P_str_Names.Length - 1; i++)//遍历所有选择的Excel文件名
                {
                    P_str_Name = P_str_Names[i];//记录遍历到的Excel文件名
                    P_list_SheetNames = GetSheetName(P_str_Name);//获取Excel文件中的所有工作表名
                    for (int j = 0; j < P_list_SheetNames.Count; j++)//遍历所有工作表
                    {
                        if (rbtn_Access.Checked)//判断Access数据库连接设置单选按钮选中
                        {//CodeGo.net/
                            ImportDataToAccess(P_str_Name, P_list_SheetNames[j]);//将将工作表内容导出到Access
                        }
                        else if (rbtn_Sql.Checked)//判断Sql Server数据库连接设置单选按钮选中
                        {
                            if (ckbox_Windows.Checked)//如果用Windows身份验证登录Sql Server
                                ImportDataToSql(P_str_Name, P_list_SheetNames[j], "Data Source=" + txt_Server.Text + ";Initial Catalog =" + cbox_Server.Text + ";Integrated Security=SSPI;");//将工作表内容导出到Sql Server
                            else if (ckbox_SQL.Checked)//如果用Sql Server身份验证登录Sql Server
                                ImportDataToSql(P_str_Name, P_list_SheetNames[j], "Data Source=" + txt_Server.Text + ";Database=" + cbox_Server.Text + ";Uid=" + txt_Name.Text + ";Pwd=" + txt_Pwd.Text + ";");//将工作表内容导出到Sql Server
                        }
                    }
                }
                MessageBox.Show("已经将所有选择的Excel工作表导入到了指定的数据库中!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
    //存储泛型集合
      private List<string> GetSheetName(string P_str_Excel)//获取所有工作表名称
            {
                List<string> P_list_SheetName = new List<string>();//实例化泛型集合对象
                //连接Excel数据库
                OleDbConnection olecon = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + P_str_Excel + ";Extended Properties=Excel 8.0");
                olecon.Open();//打开数据库连接
                System.Data.DataTable DTable = olecon.GetSchema("Tables");//实例化表对象
                DataTableReader DTReader = new DataTableReader(DTable);//实例化表读取对象
                while (DTReader.Read())//循环读取
                {
                    string P_str_Name = DTReader["Table_Name"].ToString().Replace('$', ' ').Trim();//记录工作表名称
                    if (!P_list_SheetName.Contains(P_str_Name))//判断泛型集合中是否已经存在该工作表名称
                        P_list_SheetName.Add(P_str_Name);//将工作表名添加到泛型集合中
                }
                DTable = null;//清空表对象
                DTReader = null;//清空表读取对象
                olecon.Close();//关闭数据库连接
                return P_list_SheetName;//返回得到的泛型集合
            }
    //导入指定数据库
     private void ImportDataToAccess(string P_str_Excel, string P_str_SheetName)
            {
                object missing = System.Reflection.Missing.Value;//声明object缺省值
                Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();//实例化Excel对象
                //打开Excel文件
                Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Open(P_str_Excel, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
                Microsoft.Office.Interop.Excel.Worksheet worksheet;//声明工作表
                Microsoft.Office.Interop.Access.Application access = new Microsoft.Office.Interop.Access.Application();//实例化Access对象
                worksheet = ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[P_str_SheetName]);//获取选择的工作表
                worksheet.Move(workbook.Sheets[1], missing);//将选择的工作表作为第一个工作表
                object P_obj_Name = (object)worksheet.Name;//获取工作表名称
                excel.DisplayAlerts = false;//设置Excel保存时不显示对话框
                workbook.Save();//保存工作簿
                CloseProcess("EXCEL");//关闭所有Excel进程
                try
                {
                    access.OpenCurrentDatabase(txt_Access.Text, true, "");//打开Access数据库
                    //将Excel指定工作表中的数据导入到Access中
                    access.DoCmd.TransferSpreadsheet(Microsoft.Office.Interop.Access.AcDataTransferType.acImport, Microsoft.Office.Interop.Access.AcSpreadSheetType.acSpreadsheetTypeExcel97, P_obj_Name, P_str_Excel, true, missing, missing);
                    access.Quit(Microsoft.Office.Interop.Access.AcQuitOption.acQuitSaveAll);//关闭并保存Access数据库文件
                    CloseProcess("MSACCESS");//关闭所有Access数据库进程
                }
                catch
                {
                    MessageBox.Show("Access数据库中已经存在" + P_str_SheetName + "表!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    CloseProcess("MSACCESS");//关闭所有Access数据库进程
                }
            }
      

  8.   

    http://bbs.csdn.net/topics/390830774
      

  9.   

    http://bbs.csdn.net/topics/390830774我这个例子 测试33333行数据 每行10列 数据全都是GUID 很快..
      

  10.   

    求解,大数据导出慢问题 http://bbs.csdn.net/topics/390881667
      

  11.   

    List<Vinotes.Model.GrapeType> list = WServices.GrapeTypeList(0).ToList();我估计你这里已经花了4,5秒