C# WinFrom 用Execl做模版进行数据导入简介

为了方便数据的导入,写一个通用的数据库导入方法进行导入数据会节省很大的时间,有的客户有很多的Execl,几个还好,如果多了有几百种表各种格式的表格都有,如果一个个来进行数据导入那是一个相当大的工作,写代码要每个都写一个,完了客户需求在进行变更,表格在进行改变,那代码修改量是相当大的,闹不好要死人撒,o(∩_∩)o 哈哈……懒人总会有懒的思维方式,嘿嘿……

大体的思维方式如下:

一、先创建一个Execl文件模版。在里面进行编辑一个模版,大家都知道Execl里面有公式的,从一个表里面引用其他表的数据是可以实现,这样我们把客户的表弄成跟我们模版相对应的表格,在把客户的表格用公式进行替换到其他的表格里面,在其他的表格里面我们写成利于我们进行编程的竖向表格化数据。模版的的sheet表面和里面的字段完全和数据库里面的字段一一对应。

二、编写code用代码实现导入的步骤。

(1)将创建的模版copy到临时文件夹里面

(2)将客户要导入的数据的sheet表copy到临时文件夹里面的模板里

(3)读取新模版里面的表格数据到Datatable

(4)获取Datatable里面的表名和列名生成相应的sql语句

(5)将Datatable里面数据进行循环去执行生成的sql将数据导入到创建好的数据库。

思路就是上面那样,具体实现如下面的Code所示:

引入一下命名空间
using Excel = Microsoft.Office.Interop.Excel;

using System.IO;

using System.Data.OleDb;

具体只要代码如下:
private void btn_copyToM_Click(object sender, EventArgs e)

{

//将模版copy到临时文件路径下

string tempPath = Application.StartupPath + "//temp//";

fileName = tempPath + "result_temp.xls";

string strDataFile = txt_filename.Text.Trim();

if (!System.IO.Directory.Exists(tempPath))

{

Directory.CreateDirectory(tempPath);

}

//判断是否存在模版文件

string modlPath = Application.StartupPath + "//mold//result.xls";

if (File.Exists(modlPath))

{

if (File.Exists(fileName))

{

File.Delete(fileName);

}

File.Copy(modlPath, fileName);

}

label1.Text = fileName;



// Excel.Range objRange = null;



Excel.Application objExcel = new Excel.Application();



Excel.Workbook objWorkBookMold = null;



Excel.Workbook objWorkBookData = null;



objExcel.Workbooks.Open(fileName);



objWorkBookMold = objExcel.Workbooks[1];



objExcel.Workbooks.Open(strDataFile);



objWorkBookData = objExcel.Workbooks[2];





Excel.Worksheet objSheetData = objWorkBookData.Sheets[1];

Excel.Worksheet objSheetMold = objWorkBookMold.Sheets[1];



objSheetData.UsedRange.Copy();

objSheetMold.Range["A1"].PasteSpecial();





objWorkBookMold.Save();



objWorkBookMold.Close(true, Type.Missing, Type.Missing);

objWorkBookMold = null;

objWorkBookData.Close(true, Type.Missing, Type.Missing);

objWorkBookData = null;





objExcel.Quit();

objExcel = null;



//Thread.Sleep(2000);



// File.Delete(filename);

}



/// <summary>

/// 查找指定表里面的指定数据

/// </summary>

/// <param name="path"></param>

/// <param name="tableName"></param>

/// <returns></returns>

DataTable GetDataByExcel(string path, string tableName)

{

string sqlconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=Excel 8.0";

string sql = "SELECT * FROM [" + tableName + "$] ";

DataTable dtda = new DataTable();

using (OleDbCommand oldcom = new OleDbCommand(sql, new OleDbConnection(sqlconn)))

{

OleDbDataAdapter oleda = new OleDbDataAdapter(oldcom);

dtda.TableName = tableName;

oleda.Fill(dtda);

}

return dtda;

}



/// <summary>

/// 通过数据表获取表的名字和字段名称

/// </summary>

/// <param name="data"></param>

void getDataMsg(DataTable data)

{

fileTableName = data.TableName;

fileTableColunmsName = new string[data.Columns.Count];

for (int i = 0; i < fileTableColunmsName.Length; i++)

{

fileTableColunmsName[i] = data.Columns[i].ColumnName;

}



}



/// <summary>

/// 获取模版里面的所有的表名

/// </summary>

/// <param name="path"></param>

/// <returns></returns>

string[] GetTabaleNames(string path)

{

Excel.Application objExcel = new Excel.Application();

objExcel.Workbooks.Open(path);

string[] strTableName = new string[objExcel.Workbooks[1].Worksheets.Count];

for (int i = 0; i < strTableName.Length; i++)

{

Excel.Worksheet sheet = objExcel.Workbooks[1].Worksheets[i + 1];

strTableName[i] = sheet.Name;

sheet = null;

}

objExcel.Quit();

objExcel = null;

return strTableName;

}



private void btn_sql_Click(object sender, EventArgs e)

{

StringBuilder sbSql = new StringBuilder();

sbSql.Append("insert into " + fileTableName + " ");

sbSql.Append("( ");

if (fileTableColunmsName != null)

{

if (fileTableColunmsName.Length > 0)

{

for (int i = 0; i < fileTableColunmsName.Length; i++)

{

if (i == 0)

{

sbSql.Append(fileTableColunmsName[i]);

}

else

{

sbSql.Append("," + fileTableColunmsName[i]);

}

}

sbSql.Append(")");

sbSql.Append("values ");

sbSql.Append("(");

for (int i = 0; i < fileTableColunmsName.Length; i++)

{



if (i == 0)

{

sbSql.Append("@" + fileTableColunmsName[i]);

}

else

{

sbSql.Append(",@" + fileTableColunmsName[i]);

}

}

}

}

sbSql.Append(")");

}



以上面的方式进行导入数据,不管你有多少表格了,俺们苦逼的程序员将不在进行编写Code了,只要把模版改改就OK了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值