在项目开发中,有好多数据客户是保存在Excel表中,这些数据中可能有部分是需要导入项的数据库,于是就如有了项目题目这样的需求。即需要将excel表某些列、若干行的数据导入项目。
用C#来做,需要在项目导入
using Microsoft.Office.Interop.Excel;
具体操作代码如下:
#region 读EXCEL文件
//参数是文件名
private void ReadExelToDS(String ExcelFileName)
{
//要读取的列名放在数组中
strArr = txtCol.Text.Split(',');
//要读取的起止行放在数组中
strArr1 = txtRow.Text.Split('-');
//取起始行
iStartRow = int.Parse(strArr1[0]);
//取终止行
iEndRow = int.Parse(strArr1[1]);
sbRang = new StringBuilder(30);
//打开excel文档
Microsoft.Office.Interop.Excel.ApplicationClass app = new ApplicationClass();
app.Visible = false;
WorkbookClass w = (WorkbookClass)app.Workbooks.Open(ExcelFileName, //Environment.CurrentDirectory+
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value);
object missing = Type.Missing;
Sheets sheets = w.Worksheets;
Worksheet datasheet = null;
//取Sheet1表
foreach (Worksheet sheet in sheets)
{
if (sheet.Name == "Sheet1")
{
datasheet = sheet;
break;
}
}
if (null == datasheet)
{
MessageBox.Show(this, "没有名称为 Sheet1 的Sheet.");
return ;
}
//按单元格读取字符串
int i,j;
Range rng;
string strRange;
string[] strValue=new string[strArr.Length];
for (i = iStartRow; i <= iEndRow; i++)
{
for (j = 0; j < strArr.Length; j++)
{
sbRang.Append(strArr[j]);
sbRang.Append(i.ToString());
strRange = sbRang.ToString();
rng = datasheet.get_Range(strRange ,strRange );
strValue[j] = (rng.Text == null) ? "0" : rng.Text.ToString().Trim();
sbRang.Remove(0, sbRang.Length);
}
//将取得的数据写入对象中,然后入库
if(WriteToModel(strValue))
WriteToDataSet(sysOrgan);
}
//将数据显示在listview中
DsToListView();
//读完后,退出excel
app.Quit();
NAR(sheets);
NAR(w);
NAR(app);
app = null;
return;
}
#endregion
退出excel的方法
//释放对象计数器
private void NAR(object o)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
}
catch { }
finally
{
o = null;
}
}
这些可以随心所欲地控制数据输入,效果挺不错。
第一次写博客,希望大家多多支持!