由于工作需要,经常要添加新的产品,涉及到数量多了就得考虑批量处理。
//此驱动对应的Execl格式为 xls
string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + filenameurl + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
//此驱动对应的Execl格式为 xlsx HDR=YES/No 有标题/没有标题 IMEX=0/1/2 写入/读取/写读皆可
//string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filenameurl + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'";
通过以上调用OleDb的方式,依旧有问题,主要是存在当某列前10几条的文件类型是数字,而其后数字上带有字母的话就无法读取到。即使设置此列为文本也无效,有些人说可修改注册表里面的值。但是我找注册表里面却没有那些节点,且这种方法要安装office才有效。挺多局限性。找资料看到前辈们推荐NPOI,就找到官网学习了:
官网:http://npoi.codeplex.com/SourceControl/latest#NPOI.Examples/ImportXlsToDataTable/Form1.cs
第一步,下载组件并导入NPOI.dll。
第二部,引用命名空间。using NPOI.HSSF.UserModel; using NPOI.SS.UserModel;
第三步,说明工作簿对象: HSSFWorkbook hssfworkbook;
第四部,读取数据内容:
protected void Button1_Click(object sender, EventArgs e)
{ //打开.xls文件
using (FileStream fs = File.OpenRead(@"e:/*.xls"))
{
HSSFWorkbook wk = new HSSFWorkbook(fs); //把xls文件中的数据写入wk中
for (int i = 0; i < wk.NumberOfSheets; i++) //NumberOfSheets是*.xls中总共的表数
{
ISheet sheet = wk.GetSheetAt(i); //读取当前表数据
for (int j = 0; j <= sheet.LastRowNum; j++) //LastRowNum 是当前表的总行数
{
IRow row = sheet.GetRow(j); //读取当前行数据
if (row != null)
{
for (int k = 0; k <= row.LastCellNum; k++) //LastCellNum 是当前行的总列数
{
ICell cell = row.GetCell(k); //当前表格
if (cell != null)
{ //读取cell即单元格的值做进一步处理
}
}
}
}
}
}
}
以上只是简单的读取到execl中的单元格的值,有待于进一步学习使用NPOI对文档进行操作处理。