最近要用到datatable与excel互导 有几个问题不太明白 想请教一下
1 .dataset中有多个datatable 现在想一下子把dataset中的表 导出excle文件 一个表导出一个excel 请问如果批量导出?
2 看到网上有很多datatable导出excel的方法 有的用excel控件  有的用流 请问哪种方法比较好些。 因为以后还要把excel导入到mysql数据库。 
3. excel导入到mysql数据库有什么好方法。有的是先导入到dataset然后逐条insert 有没有更简便的方法?

解决方案 »

  1.   

    1.如果是多个,应该先生成文件放在服务器上,然后将链接显示在页面上让用户下载
    2.如果要做为数据源导入到mysql应该有excel组件.否则不能识别
    3.没什么好办法.
      

  2.   

    1:循环导出,导出Excel的代码有很多 你可以查一下
    2:个人感觉流比较快
    3:不是太清楚,应该可以直接导入
      

  3.   

    如果是循环导出 那是不是每个文件都要制定文件夹得位置?
    我想用户直接制定一个文件夹后就可以批量的导出多个excel
      

  4.   

    如果是循环导出 那是不是每个文件都要制定文件夹得位置
    ===>
    如果你使用excel组件导出,可以将多个datatable放到一个文件的多个sheet中.
      

  5.   

    我装的office 2007 没找到Microsoft.Office.Interop.Excel.dll  晕
      

  6.   

    1。用流直接生成的Excel不是标准的EXCEL文件;除了Excel2003打开不会提示外,其它版本,例如2007版本打开文件有会提示。不标准的EXCEL导入数据库中,很不方便.
    2。用EXCE控件生成EXCEL太麻烦,还必须要安装ms office,占用内存又不容易释放。EXCEL导入数据库用OLE直接导入。
    3。先用MS office做成EXCEL模板文件,需要导出时,用FileCopy复制生成临时文件,把导出数据插入临时文件中,再把临时文件传到流中,给客户下裁。然后再删除临时文件。
    EXCEL导入数据库用OLE直接导入。
    用第三种方法导入导出EXCEL都方便,如果系统的表结构有变更,完全可以做到不用修改代码,调整导入导出EXCEL格式。
      

  7.   

    在项目中添加引用,COM组件
    遍历dataset,导出数据到多个sheet
    Excel.Application app = new Excel.ApplicationClass();  
    app.Visible = true;  
    Excel.Workbook workBook = app.Workbooks.Open(templetFile,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);  
    Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Sheets.get_Item(1);  
    for(int i=1;i <sheetCount;i++)  
    {  
    ((Excel.Worksheet)workBook.Worksheets.get_Item(i)).Copy(missing,workBook.Worksheets[i]);  
     
    }  
    EXCEL文件另存为CSV的纯文本文件,然后在MYSQL中建好表之后用 LOAD DATA INFILE
      

  8.   

    boval999 说的第三种方法 有无相关例子提供一下 谢谢
      

  9.   

    说点好的。
    1.流导出,直接生成,速度比较快
    2.用Excel控件,容易控制导出的Excel的样式,如背景色,单元格边框大小以及冻结效果等等
    3.用模版做导出,听说不错,没弄过..
      

  10.   

    用Excel控件 必须要安装Office确实挺麻烦  用模版做导出看样子不错 很想试下 
      

  11.   

    不知道大家在做表数据的备份的时候都用的什么方法?  excel ? xml? 
      

  12.   

    最近我也在做数据导出excel,先后使用了
    owc11 在格式控制上有点麻烦
    Myxls 免费控件,只有一个dll
    Npoi 国产开源控件,有多个dll,目前有支持.net的版本
      

  13.   

    其实用模板导出很简单和实用,下面是实例:
    public void DBToExcel(string sDemo)
            {
                string sSQL = "";
                System.Data.DataTable DT = new DataTable();
                IniFile Ini = new OA.API.IniFile();
                Ini.IniFileSource(page);  
                sSQL ="Select " + Ini.IniReadValue(Section, "Write");
                sSQL += " from "+ m_TableName ;
                DT = DB.DbHelperSQL.Query(sSQL).Tables[0]  ; 
                sSQL = DBToExcelSQL() ;            // 根据模板文件创建副本  
                string filePath = page.Server.MapPath(@"~/Temp/" + Guid.NewGuid().ToString() + ".xls");
                File.Copy(page.Server.MapPath(@"~/Demo/"+ sDemo  + ".xls"), filePath);
                try
                {
                
                    // 使用OleDb驱动程序连接到副本  
                    OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=Excel 8.0;");
                    using (conn)
                    {
                        conn.Open();
                        // 增加记录  
              
                        foreach (DataRow dRow in DT.Rows)
                        {
                            OleDbCommand cmd = new OleDbCommand(sSQL, conn);                        for (int i = 0; i < DT.Columns.Count; i++)
                            {
                                string sName = "@" + DT.Columns[i].ToString();
                                string sValue = dRow[i].ToString();
                                cmd.Parameters.AddWithValue(sName, sValue);    
                            }
                            cmd.ExecuteNonQuery();
                        }
                    }
                    // 输出副本的二进制字节流  
                    page.Response.ContentType = "application/ms-excel";
                    page.Response.AppendHeader("Content-Disposition", "attachment;filename="+ OAMath.Encoding(sDemo) +".xls");
                    page.Response.BinaryWrite(File.ReadAllBytes(filePath));
                }
                catch (Exception e)
                {
                    throw new Exception(e.Message);
                }
                finally
                {
                    // 删除副本  
                    File.Delete(filePath);
                }
            }
      

  14.   

    谢谢boval999  今天试了下Myxls  发现导出excel真是非常方便。 不错的选择
    excel导入到dataset时发现数据丢失的情况  而且只会出现ID列 其他的列都没出来 想想应该是数据类型的原因。 网上找了很多资料 都没成功。 还有的说导出csv可以 但是csv貌似不支持多个sheet的。 杯具了 莫非这条路真的要放弃? 
      

  15.   

    防止数据丢失,最好格式是字符串,导出导入数据就不会丢失.
    OLE导入有一个缺点,如果OLE判断导入字段是数字类型,会把字段的数据转化为数字类型,转化失败返回空数据。