使用COM打开Excel文档注意事项
本文主要讲解程序中打开Excel文档,读写Excel文档可以参照前章:
如果只是单纯的打开Excel文档,建议使用:
System.Diagnostics.Process.Start("EXECL.EXE", @"C:\Users\test.xls");
因为它不会留下后台没用进程。
如果需要跳转到相应的sheet或者单元格,只能使用COM了。坏处就是如果不清理就会留下后台进程。
参照需要引入COM:Microsoft Excel 14.0 Object Library 或者Microsoft Excel 16.0 Object Library
命名空间:Microsoft.Office.Interop.Excel
private static Application _app = null;
private static Dictionary<string, Workbook> _bookDic = new Dictionary<string, Workbook>(); public static void Open(string path, string sheetName, int row = , int column = )
{
if (_app == null)
{
_app = new Application();
} Workbook workbook = null;
if (_bookDic.ContainsKey(path))
{
workbook = _bookDic[path];
}
else
{
workbook = _app.Workbooks.Open(Filename: path, ReadOnly: false);
_bookDic.Add(path, workbook);
} var workSheet = workbook?.Worksheets?.getSheetByName(sheetName);
if (workSheet != null)
{
workSheet.Application.Visible = false;
workSheet.Application.Visible = true; workSheet.Application.DisplayAlerts = false;
// 为了切换WorkBook,这步非常关键。
// 不然会出异常:0x800A03EC
workSheet.Application.ActiveWorkbook.Activate(); workbook.Activate();
workSheet.Select();
workSheet.Cells[row, column]?.Activate(); workSheet.Application.DisplayAlerts = true; System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
}
} private static Worksheet getSheetByName(this Sheets workSheets, string sheetName)
{
foreach (Worksheet sheet in workSheets)
{
if (sheet.Name == sheetName)
{
return sheet;
}
} return null;
} public static void Dispose()
{
try
{
if (_app != null)
{
foreach (var book in _bookDic)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(book.Value.Worksheets);
System.Runtime.InteropServices.Marshal.ReleaseComObject(book.Value);
} _app.Workbooks.Close();
System.Runtime.InteropServices.Marshal.ReleaseComObject(_app.Workbooks); _app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(_app);
}
}
catch (Exception e)
{
// throw e;
}
}
Dispose方法如果忘记执行,哪怕Excel你关闭了,进程中还是会留下一个Excel后台进程。
使用COM打开Excel文档注意事项的更多相关文章
- .net 打开Excel文档并转为DataTable
/// <summary> /// 打开Excel文档并转为DataTable /// </summary> /// <returns></returns&g ...
- c#中打开Excel文档
方法一:(调用Excel的COM组件) 在项目中打开Add Reference对话框,选择COM栏,之后在COM列表中找到"Microsoft Excel 11.0 Object ...
- 4位组合型Excel文档密码怎么破解
现代社会我们会遇到各种密码,很多的密码我们一段时间不用就不知不觉的忘记了.很多的excel用户就遇到过这种情况,这个时候我们就需要一款Excel密码破解工具.Advanced Office Passw ...
- C#编程实现Excel文档中搜索文本
有了在Word文档中编程实现搜索文本的经验,在Excel中实现这个功能也并非难事. 打开Excel的VBA帮助,查看Excel的对象模型,很容易找到完成这个功能需要的几个集合和对象:Applicati ...
- Android解析Excel文档完整示例
MainActivity如下: package cc.testexcel; import java.io.File; import jxl.Cell; import jxl.CellType; imp ...
- WebBrowser打开Word文档的一些注意事项
WebBrowser打开Word文档的一些注意事项 分类: C#word2010-03-31 21:26 5640人阅读 评论(3) 收藏 举报 webbrowser文档browser工具object ...
- 如何才能恢复Excel文档的打开密码
对于一些密码的破解,最常用的方法就是“暴力破解”,也是获取密码的最后一种方法,Advanced Office Password Recovery的暴力破解能够破解复杂的Office文档密码.wps也有 ...
- C#操作Excel(2)-- 打开-读取Excel文档
由于要为某软件实现导出Excel功能,故有此文. 本文的开发环境是Visual Studio 2010 ,C#, Excel 2007. 新建C#工程后打开Solution Explorer,可以看到 ...
- 基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理
http://www.cnblogs.com/wuhuacong/p/4175266.html 在一般的管理系统模块里面,越来越多的设计到一些常用文档的上传保存操作,其中如PDF.Word.Excel ...
随机推荐
- PC能替代服务器吗?
PC能替代服务器吗?全方位解析二者区别_华为服务器_服务器x86服务器-中关村在线http://server.zol.com.cn/536/5366835_all.html
- mongo常用sql
基本查询 db.getCollection('chdr').find({chdrnum:"test123456"}) lookup关联查询 db.getCollection ( ...
- JAVA高级-面试题总结
最近面试了一些公司,针对面试中遇到的问题在此记录,提升自己,造福大家 一.java源码相关 ArrayList创建和add等各种api使用原理 HashMap 的创建,put原理,和HashTable ...
- 简单学完HTML+CSS+JS,现在开始看算法(第四版)----欧几里得算法
欧几里得算法 package euclidean_algorithm; import java.util.Scanner; /** * @author ALazy_cat * 欧几里得算法的自然语言描 ...
- Linux下Redis4.0.12安装、配置、优化
一.安装 1.检查gcc环境 执行命令,如果Linux系统没有安装gcc编译器,会提示“Command not found” # gcc -v 安装gcc # yum -y install gcc 以 ...
- select默认显示
select默认显示第一个option,但大部分需求都是显示一个请选择,点击后在显示option的内容. 就像上图一样 但如果正常写的话会是像下面这样显示 请选择也会显示在下拉款里面,这样就很不友好 ...
- python学习笔记——(三)文件操作
·集合操作及其相应的操作符表示集合中没有插入,只有添加,因为毕竟无序 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Vergil Zhan ...
- git教程:远程仓库
转自:远程仓库 到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了. 可是有用过集中式版本控制系统SVN的童鞋会站出来说,这些功能在SVN里早就 ...
- google搜索引擎使用
部分引用 http://yearslater.me/2017/06/15/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E6%90%9C%E7%B4%A2%E5%BC%95 ...
- 百战程序员——JDBC
JDBC全称是什么? JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...