第一种,安装了office套件,不想打开excel从里面提取数据
第二种,安装了office套件,然后打开excel再提取数据
第三种,没安装office套件,使用第三方插件提取数据
第一种:
安装过office套件,需要在项目引用中添加Microsoft Excel 16.0 Object Library 这个类库(版本不同可能中间的数字也不同,我这里是office2016版本)
添加完之后需要using一下引用的类库
using Microsoft.Office.Interop.Excel;
完成之后就可以开始秀操作了
下面是操作代码:
//定义一个路径,然后根据路径打开excel文档
string 路径;
Microsoft.Office.Interop.Excel.Application app; //定义一个应用程序
Workbooks wbs;//excel中的 workbooks
Workbook wb = null; //workbook
Worksheet ws; //worksheet
app = new Microsoft.Office.Interop.Excel.Application();//创建一个新的APP对象
wbs = app.Workbooks;//从新对象中取的workbooks
wbs.Application.Visible = false;//不显示APP操作
app.ScreenUpdating = false;//禁止刷新屏幕
app.DisplayAlerts = false;//是否弹出提示框
try
{
wb = wbs.Open(路径);//打开excel表
ws = wb.ActiveSheet;//获取活动的sheet,一般为第一个sheet
//每个公司表格样式不同,下面的获取位置也不同,请自行修改,ZW表格的内容是从第9行开始,所以下面 cout=9
//提取数据,直接从9~99999行中查找编码和数量不为空的数据,为空就停止
for (int cout = 9; cout <= 99999; cout++)
{//下面是从[9,3]9行3列中获取值,后面9行8列中获取值,分别代表的是编码和数量
if (ws.Cells[cout, 3].Value2 != null && ws.Cells[cout, 8].Value2 != null)
{
//此处就可以将你获取到的数据,进行处理了
//...............
}
else
{
break;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "提取错误");
}
try
{//释放资源,必须要处理的一步,如果不处理,数据比较多的话会造成短时间内内存被异常占用,直到系统自动回收为止
if (wb != null)
{
wb.Close(Type.Missing, Type.Missing, Type.Missing);
}
else
{
wb = null;
}
if (wbs != null)
{
wbs.Close();
}
else
{
wbs = null;
}
if (app != null)
{
app.Quit();
}
else
{
app = null;
}
//GC.Collect();//系统自动回收资源,没有人为释放彻底,弃用
//关闭excel进程,如果不关闭,也会造成资源被占用,excel进程一堆的情况,此方法下一次更新再写进去
//CloseProc("EXCEL");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "释放资源错误");
}
第一种方法就完成了,下一篇第二种打开excel进行操作,未完待续....