C#开发的高性能EXCEL导入、导出工具DataPie
最近几个月写了一个数据导入导出工具。支持百万级别的数据导出。下载地址: http://datapie.codeplex测试数据/
先看看工具界面:
登录界面:
主界面:
主要代码:
1. 把 excel 文件读到 DataTable
/// <summary>
/// 根据excel路径和sheet名称,返回excel的DataTable
/// </summary>
public static DataTable GetExcelDataTable(string path, string tname)
{
/*Office 2007*/
string ace = "Microsoft.ACE.OLEDB.12.0";
/*Office 97 - 2003*/
string jet = "Microsoft.Jet.OLEDB.4.0";
string xl2007 = "Excel 12.0 Xml";
string xl2003 = "Excel 8.0";
string imex = "IMEX=1";
/* csv */
string text = "text";
string fmt = "FMT=Delimited";
string hdr = "Yes";
string conn = "Provider={0};Data Source={1};Extended Properties=\"{2};HDR={3};{4}\";";
string select = string.Format("SELECT * FROM [{0}$]", tname);
//string select = sql;
string ext = Path.GetExtension(path);
OleDbDataAdapter oda;
DataTable dt = new DataTable("data");
switch (ext.ToLower())
{
case ".xlsx":
conn = String.Format(conn, ace, Path.GetFullPath(path), xl2007, hdr, imex);
break;
case ".xls":
conn = String.Format(conn, jet, Path.GetFullPath(path), xl2003, hdr, imex);
break;
case ".csv":
conn = String.Format(conn, jet, Path.GetDirectoryName(path), text, hdr, fmt);
//sheet = Path.GetFileName(path);
break;
default:
throw new Exception("File Not Supported!");
}
OleDbConnection con = new OleDbConnection(conn);
con.Open();
//select = string.Format(select, sql);
oda = new OleDbDataAdapter(select, con);
oda.Fill(dt);
con.Close();
return dt;
}
2. 批量把数据导入到数据库
1 ) SQL SERVER 版本
public bool SqlBulkCopyImport(IList<string> maplist, string TableName, DataTable dt)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = TableName;
foreach (string a in maplist)
{
bulkCopy.ColumnMappings.Add(a, a);
}
try
{
bulkCopy.WriteToServer(dt);
return true;
}
catch (Exception e)
{
throw e;
}
}
}
}
2 ) oracle 版本
public bool SqlBulkCopyImport(IList<string> maplist, string TableName, DataTable dt)
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
connection.Open();
using (OracleBulkCopy bulkCopy = new OracleBulkCopy(connection))
{
bulkCopy.DestinationTableName = TableName;
foreach (string a in maplist)
{
bulkCopy.ColumnMappings.Add(a, a);
}
try
{
bulkCopy.WriteToServer(dt);
return true;
}
catch (Exception e)
{
throw e;
}
}
}
}
3)ACCESS版本
public bool SqlBulkCopyImport(IList<string> maplist, string TableName, DataTable dt)
{
try
{
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
connection.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter("select * from " + TableName + " where 1=0", connection);
OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
int rowcount = dt.Rows.Count;
for (int n = 0; n < rowcount; n++)
{
dt.Rows[n].SetAdded();
}
//adapter.UpdateBatchSize = 1000;
adapter.Update(dt);
}
return true;
}
catch (Exception e)
{
throw e;
}
}
3 .导出 EXCEL 文件
/// <summary>
/// 保存excel文件,覆盖相同文件名的文件
/// </summary>
public static bool SaveExcel(string SheetName, DataTable dt, ExcelPackage package)
{
try
{
ExcelWorksheet ws = package.Workbook.Worksheets.Add(SheetName);
ws.Cells["A1"].LoadFromDataTable(dt, true);
return true;
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 多个表格导出到一个excel工作簿
/// </summary>
public static void export(IList<string> SheetNames, string filename, DBConfig db, IList<string> sqls)
{
DataTable dt = new DataTable();
FileInfo newFile = new FileInfo(filename);
if (newFile.Exists)
{
newFile.Delete();
newFile = new FileInfo(filename);
}
using (ExcelPackage package = new ExcelPackage(newFile))
{
for (int i = 0; i < sqls.Count; i++)
{
dt = db.DB.ReturnDataTable(sqls[i]);
SaveExcel(SheetNames[i], dt, package);
}
package.Save();
}
}
/// <summary>
/// 单个表格导出到一个excel工作簿
/// </summary>
public static void export(string SheetName, string filename, DBConfig db, string sql)
{
DataTable dt = new DataTable();
FileInfo newFile = new FileInfo(filename);
if (newFile.Exists)
{
newFile.Delete();
newFile = new FileInfo(filename);
}
using (ExcelPackage package = new ExcelPackage(newFile))
{
dt = db.DB.ReturnDataTable(sql);
SaveExcel(SheetName, dt, package);
package.Save();
}
}
/// <summary>
/// 单个表导出到多个excel工作簿(分页)
/// </summary>
public static void export(string SheetName, string filename, DBConfig db, string sql, int num, int pagesize)
{
DataTable dt = new DataTable();
FileInfo newFile = new FileInfo(filename);
int numtb = num / pagesize + 1;
for (int i = 1; i <= numtb; i++)
{
string s = filename.Substring(0, filename.LastIndexOf("."));
StringBuilder newfileName = new StringBuilder(s);
newfileName.Append(i + ".xlsx");
newFile = new FileInfo(newfileName.ToString());
if (newFile.Exists)
{
newFile.Delete();
newFile = new FileInfo(newfileName.ToString());
}
using (ExcelPackage package = new ExcelPackage(newFile))
{
dt = db.DB.ReturnDataTable(sql, pagesize * (i - 1), pagesize);
SaveExcel(SheetName, dt, package);
package.Save();
}
}
}
4 .DataPie下载地址
http://datapie.codeplex测试数据/releases/view/88081
作者: Leo_wl
出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于C#开发的高性能EXCEL导入、导出工具DataPie的详细内容...