最近要用到datatable与excel互导 有几个问题不太明白 想请教一下
1 .dataset中有多个datatable 现在想一下子把dataset中的表 导出excle文件 一个表导出一个excel 请问如果批量导出?
2 看到网上有很多datatable导出excel的方法 有的用excel控件 有的用流 请问哪种方法比较好些。 因为以后还要把excel导入到mysql数据库。
3. excel导入到mysql数据库有什么好方法。有的是先导入到dataset然后逐条insert 有没有更简便的方法?
1 .dataset中有多个datatable 现在想一下子把dataset中的表 导出excle文件 一个表导出一个excel 请问如果批量导出?
2 看到网上有很多datatable导出excel的方法 有的用excel控件 有的用流 请问哪种方法比较好些。 因为以后还要把excel导入到mysql数据库。
3. excel导入到mysql数据库有什么好方法。有的是先导入到dataset然后逐条insert 有没有更简便的方法?
2.如果要做为数据源导入到mysql应该有excel组件.否则不能识别
3.没什么好办法.
2:个人感觉流比较快
3:不是太清楚,应该可以直接导入
我想用户直接制定一个文件夹后就可以批量的导出多个excel
===>
如果你使用excel组件导出,可以将多个datatable放到一个文件的多个sheet中.
2。用EXCE控件生成EXCEL太麻烦,还必须要安装ms office,占用内存又不容易释放。EXCEL导入数据库用OLE直接导入。
3。先用MS office做成EXCEL模板文件,需要导出时,用FileCopy复制生成临时文件,把导出数据插入临时文件中,再把临时文件传到流中,给客户下裁。然后再删除临时文件。
EXCEL导入数据库用OLE直接导入。
用第三种方法导入导出EXCEL都方便,如果系统的表结构有变更,完全可以做到不用修改代码,调整导入导出EXCEL格式。
遍历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
1.流导出,直接生成,速度比较快
2.用Excel控件,容易控制导出的Excel的样式,如背景色,单元格边框大小以及冻结效果等等
3.用模版做导出,听说不错,没弄过..
owc11 在格式控制上有点麻烦
Myxls 免费控件,只有一个dll
Npoi 国产开源控件,有多个dll,目前有支持.net的版本
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);
}
}
excel导入到dataset时发现数据丢失的情况 而且只会出现ID列 其他的列都没出来 想想应该是数据类型的原因。 网上找了很多资料 都没成功。 还有的说导出csv可以 但是csv貌似不支持多个sheet的。 杯具了 莫非这条路真的要放弃?
OLE导入有一个缺点,如果OLE判断导入字段是数字类型,会把字段的数据转化为数字类型,转化失败返回空数据。