您的位置:首页 > 数据库 > Oracle

C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS,附源码

2012-12-10 09:41 681 查看
先看看工具界面:

登录界面:



主界面:



主要代码:

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
.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();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: