本文主要讲解程序中打开Excel文档,读写Excel文档可以参照前章:

C#读写Excel实践笔记

C#使用NPOI读写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文档注意事项的更多相关文章

  1. .net 打开Excel文档并转为DataTable

    /// <summary> /// 打开Excel文档并转为DataTable /// </summary> /// <returns></returns&g ...

  2. c#中打开Excel文档

    方法一:(调用Excel的COM组件)       在项目中打开Add Reference对话框,选择COM栏,之后在COM列表中找到"Microsoft Excel 11.0 Object ...

  3. 4位组合型Excel文档密码怎么破解

    现代社会我们会遇到各种密码,很多的密码我们一段时间不用就不知不觉的忘记了.很多的excel用户就遇到过这种情况,这个时候我们就需要一款Excel密码破解工具.Advanced Office Passw ...

  4. C#编程实现Excel文档中搜索文本

    有了在Word文档中编程实现搜索文本的经验,在Excel中实现这个功能也并非难事. 打开Excel的VBA帮助,查看Excel的对象模型,很容易找到完成这个功能需要的几个集合和对象:Applicati ...

  5. Android解析Excel文档完整示例

    MainActivity如下: package cc.testexcel; import java.io.File; import jxl.Cell; import jxl.CellType; imp ...

  6. WebBrowser打开Word文档的一些注意事项

    WebBrowser打开Word文档的一些注意事项 分类: C#word2010-03-31 21:26 5640人阅读 评论(3) 收藏 举报 webbrowser文档browser工具object ...

  7. 如何才能恢复Excel文档的打开密码

    对于一些密码的破解,最常用的方法就是“暴力破解”,也是获取密码的最后一种方法,Advanced Office Password Recovery的暴力破解能够破解复杂的Office文档密码.wps也有 ...

  8. C#操作Excel(2)-- 打开-读取Excel文档

    由于要为某软件实现导出Excel功能,故有此文. 本文的开发环境是Visual Studio 2010 ,C#, Excel 2007. 新建C#工程后打开Solution Explorer,可以看到 ...

  9. 基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理

    http://www.cnblogs.com/wuhuacong/p/4175266.html 在一般的管理系统模块里面,越来越多的设计到一些常用文档的上传保存操作,其中如PDF.Word.Excel ...

随机推荐

  1. javascript 禁用 右键 按键 禁用开发者工具

    var h = window.innerHeight,w=window.innerWidth; //禁用右键 (防止右键查看源代码) window.oncontextmenu=function(){ ...

  2. task打印执行结果

    使用debug输出task执行的register: - name: check extract session # script: /app/ansiblecfg/XXX/roles/test/tas ...

  3. My new Blog on cnblogs

    My New Blog 这是菜鸡Herself32在博客园新开的Blog,一部分文章会同时加载到这里. 也欢迎访问主站:https://herself32.github.io QwQ

  4. Mysql 大量Sleep 解决

    排查 SHOW GLOBAL VARIABLES LIKE 'wait_timeout'; SHOW GLOBAL VARIABLES LIKE 'interactive_timeout'; 在线更新 ...

  5. 洛谷P1966 【火柴排队】

    题解 P1966 [火柴排队] 说明: 在数学中有个公式: (a1-b1)^2+(a2-b2)^2<(a2-b1)^2+(a1-b2)^2 (你可以自己试着证一下) 两列火柴对应的两根火柴在各列 ...

  6. (原创)Spice 网表范例

    一.常规网表 Inverter .lib "D:\lib\l0040ll_v1p4_1r.lib" TT .param SUPPLY=.1V .param T=10ns .para ...

  7. div嵌套,常见左右分类栏目

    最终效果图如下: html代码如下: <div class="smalItem"> <div class="leftnav"> < ...

  8. useradd和groupadd(Linux创建用户\用户组\设置\分配用户权限\多用户远程登录权限)的使用

    前言: man useradd man  groupadd info useradd info  groupadd 都可以获取相关命令的用法信息. 个人比较喜欢读英文解释文档,没有你想象的那么comp ...

  9. ideal的maven工程启动时老是报错,提示web.xml里面的监听器找不到,但是实际又是存在的

    -X clean compile package -Dmaven.repo.local=D:\repository-pss -Dmaven.test.skip=true maven仓库地址

  10. 网络编程一定要看过的socket大山

    python已经可以做很多的东西了.但是要想要和别人互联互通就会涉及到一个关键的模块socket!值得一提的是,其实socket不是python独创的一种模块,而是任何语言都会有的一个部分!自己的程序 ...