第二种,直接操作已经打开了的Excel文件,这种方法使用excel自带的功能就行了,直接在项目中创建VSTO应用程序
还有两种需要用到的方法
之前写过的一篇文章:https://www.jianshu.com/p/17d98ab7b83a
然后从文件中提取编码和数量和上一篇一样
上一篇中关闭excel进程的方法:
//关闭excel时使用
private static void CloseProc(string ProcName)//关闭excel时需要用
{
ArrayList procList = new ArrayList();
string tempName;
foreach (System.Diagnostics.Process thisProc in System.Diagnostics.Process.GetProcesses())
{
tempName = thisProc.ProcessName;
procList.Add(tempName);
if (tempName == ProcName)
{
thisProc.Kill(); //当发送关闭窗口命令无效时强行结束进程
}
}
}
检测电脑中是否安装excel方法:
private static bool isExcelInstalled()
{
Type type = Type.GetTypeFromProgID("Excel.Application");
return type != null;
//返回不为空的true或者false
}
详细获取方法:
//获取当前活动的应用程序
Application app = Globals.ThisAddIn.Application;
app.ScreenUpdating = true;//禁止刷新屏幕
app.DisplayAlerts = false;//是否弹出提示框
//是否显示表格活动
app.Visible = true;
//获取当前活动的活动页
_Workbook wb = app.ActiveWorkbook;
wb.Application.Visible = true;//是否显示APP操作
//获取当前的sheet
Worksheet ws= wb.ActiveSheet;
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原生功能,需要安装office套件,下一篇教你使用第三方类库来操作excel,未完待续........
网友评论