VSTO学习笔记(五)批量编辑Excel 2010 x64
原文:VSTO学习笔记(五)批量编辑Excel 2010 x64
近期因为工作的需要,经常要批量处理大量的Excel文件,如果纯手工一个个修改,非常的麻烦,于是写了这么一个帮助类,希望能对你有所帮助。里面很多方法可以进一步推广,增减适当的参数,部分方法用到了C# 4.0新特性,如果需要调试,请安装Visual Studio 2010。
本系列所有示例代码均在 Visual Studio 2010 Ultimate RC + Office 2010 Professional Plus Beta x64 上测试通过。
首先添加引用:
using Microsoft.Office.Interop.Excel;
using System.Drawing;
using System.IO;
代码
{
destsheet.Cells[i, j].Value2 = srcsheet.Cells[i, j].Value2;
}
}
}
//屏蔽Excel的提示信息
app.Application.DisplayAlerts = false;
destbook.Save();
}
catch (Exception ex)
{
throw ex;
}
finally
{
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
System.Runtime.InteropServices.Marshal.ReleaseComObject(srcbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(srcsheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(destbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(destsheet);
app = null;
srcbook = null;
destbook = null;
srcsheet = null;
destsheet = null;
GC.Collect();
}
}
Range.Interior.Color是Office中表示颜色的方法,其返回一个整数,表示一种特定的颜色:

但是我们平时用的最多的是RGB表示的颜色,可以用
srcsheet.Cells[i, j].Interior.Color ))
将ColorIndex与RGB进行关联。
代码
/// 判断一个工作簿的一个工作表有没有添加保护
/// </summary>
/// <param name="v_strDir">工作簿的完整路径</param>
/// <param name="v_strSheetName">工作表名</param>
private static void fn判断工作表是否被保护(string v_strDir, string v_strSheetName)
{
StringBuilder sb = new StringBuilder();
Application app = new Application();
DirectoryInfo dir = new DirectoryInfo(v_strDir);
try
{
//递归查找所有Excel 2007/2010的文件
foreach (FileInfo f in dir.GetFiles("*.xlsx", SearchOption.AllDirectories))
{
Workbook book = app.Workbooks.Open(f.FullName);
if (book.Worksheets[v_strSheetName].ProtectContents)
{
sb.Append(book.Name + ",");
}
app.Application.DisplayAlerts = false;
book.Save();
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
app = null;
GC.Collect();
}
Console.WriteLine(sb.ToString());
}
若不知道Excel工作簿或工作表的密码,可以用Passware进行破解,经过测试,Passware 可以破解Office 2003/2007/2010,其官方主页称可以破解Windows 7 的 BitLocker 加密技术。
代码
{
if (sheet.Cells[i, j].HasFormula)
{
sb.Append(book.Name + " " + sheet.Name + " 第" + i.ToString() + "行第" + j.ToString() + "列包含公式!\n");
}
}
}
}
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
app = null;
GC.Collect();
}
Console.WriteLine(sb.ToString());
}
代码
/// 获取指定工作簿的所有工作表
/// </summary>
/// <param name="v_strDir">工作簿的完整路径</param>
private static void fn获取指定工作簿的所有工作表(string v_strDir)
{
StringBuilder sb = new StringBuilder();
Application app = new Application();
DirectoryInfo dir = new DirectoryInfo(v_strDir);
try
{
foreach (FileInfo f in dir.GetFiles("*.xlsx", SearchOption.AllDirectories))
{
Workbook book = app.Workbooks.Open(f.FullName);
sb.Append(book.Name);
foreach (Worksheet sheet in book.Worksheets)
{
sb.Append(sheet.Name + " ");
}
sb.Append("\n");
app.Application.DisplayAlerts = false;
book.Save();
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
app = null;
GC.Collect();
}
Console.WriteLine(sb.ToString());
}
批量转换Excel的格式
代码
/// 批量转换Excel 2003 至Excel 2007/2010格式
/// 可以修改XlFileFormat枚举的值来转换为想要的格式
/// </summary>
/// <param name="v_strDir">工作簿的查找路径</param>
private static void fn批量转换Excel文件格式(string v_strDir)
{
Application app = new Application();
DirectoryInfo dir = new DirectoryInfo(v_strDir);
Workbook book;
app.Application.DisplayAlerts = false;
try
{
foreach (FileInfo fi in dir.GetFiles("*.xls", SearchOption.AllDirectories))
{
book = app.Workbooks.Open(fi.FullName);
book.SaveAs(fi.DirectoryName + @"\" + fi.Name.Replace(fi.Extension, string.Empty) + ".xlsx", XlFileFormat.xlOpenXMLWorkbook);
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
app = null;
GC.Collect();
}
}
比较两个工作表的内容
代码
{
string src = sheet.Cells[i, j].Value == null ? string.Empty : sheet.Cells[i, j].Value.ToString();
string dest = destBook.Worksheets[sheet.Name].Cells[i, j].Value == null ? string.Empty : destBook.Worksheets[sheet.Name].Cells[i, j].Value.ToString();
if (src != dest)
{
sw.WriteLine(@"当前工作表: " + sheet.Name + " 第" + i + "行" + j + "列数据不相同!");
}
}
}
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
sw.Flush();
sw.Close();
app.Application.DisplayAlerts = false;
srcBook.Save();
destBook.Save();
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
System.Runtime.InteropServices.Marshal.ReleaseComObject(srcBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(destBook);
app = null;
srcBook = null;
destBook = null;
GC.Collect();
}
}
小结:
本次通过一系列的实例探讨了Excel的操作方法,我觉得还挺实用,你可以根据需求进行完善。代码仅供测试,如果欲操作的Excel数量巨大,请谨慎使用。
后续篇章我会继续研究Excel中的操作。
VSTO学习笔记(五)批量编辑Excel 2010 x64的更多相关文章
- VSTO学习笔记(二)Excel对象模型
原文:VSTO学习笔记(二)Excel对象模型 上一次主要学习了VSTO的发展历史及其历代版本的新特性,概述了VSTO对开发人员的帮助和效率提升.从这次开始,将从VSTO 4.0开始,逐一探讨VSTO ...
- VSTO 学习笔记(十)Office 2010 Ribbon开发
原文:VSTO 学习笔记(十)Office 2010 Ribbon开发 微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个R ...
- 【VS开发】VSTO 学习笔记(十)Office 2010 Ribbon开发
微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个Ribbon中,便于集中管理.操作.这种Ribbon是高度可定制的,用户可 ...
- VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式
原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Exce ...
- VSTO 学习笔记(六)在 Excel 2010中使用RDLC报表
原文:VSTO 学习笔记(六)在 Excel 2010中使用RDLC报表 Excel具有强大的图表显示.分析功能,这点毋庸置疑,但是如果将常规MIS系统中的数据以报表的形式在Excel中显示,却并不那 ...
- VSTO学习笔记(七)基于WPF的Excel分析、转换小程序
原文:VSTO学习笔记(七)基于WPF的Excel分析.转换小程序 近期因为工作的需要,要批量处理Excel文件,于是写了一个小程序,来提升工作效率. 小程序的功能是对Excel进行一些分析.验证,然 ...
- VSTO学习笔记(三) 开发Office 2010 64位COM加载项
原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...
- VSTO学习笔记(十四)Excel数据透视表与PowerPivot
原文:VSTO学习笔记(十四)Excel数据透视表与PowerPivot 近期公司内部在做一种通用查询报表,方便人力资源分析.统计数据.由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的 ...
- VSTO学习笔记(十五)Office 2013 初体验
原文:VSTO学习笔记(十五)Office 2013 初体验 Office 2013 近期发布了首个面向消费者的预览版本,我也于第一时间进行了更新试用.从此开始VSTO系列全面转向Office 201 ...
随机推荐
- 微软Ajax--UpdatePanel控件
今天用做日历显示本月的考勤记录,用到了UpdatePanel控件,才发现对这个控件并不太了解,所以找了点儿资料,整理了一下给大家发上来! 一.UpdatePanel的结构 <asp:Script ...
- linux命令:Linux命令大全
Linux命令大全 http://man.linuxde.net/
- javascript 学习资料网址一览
1.http://www.runoob.com/ 2.https://developer.mozilla.org/zh-CN/ 3.http://www.imooc.com/ 视频类
- Swift - iCloud存储介绍
对于开发者而言,涉及iCloud存储的功能主要有两个: 一是 iCloud documnet storage,利用 iCloud 存储用户文件,比如保存一些用户在使用应用时生成的文件以及数据库文件等. ...
- appium 真机测试问题 出现 instruments crashed on startup
1.appium 真机测试的时候 instruments crashed on startup,必须在真机上打开UI Automation 在设置里: Developer->Enable UI ...
- C 语言资源大全中文版
C 语言资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-c 是 koz.ross 发起维护的 C 语言资源列表,内容包括了: ...
- jQuery事件大全
jQuery事件大全 attribute: $(" p" ).addclass(css中定义的样式类型) 给某个元素添加样式 $(" img" ).attr( ...
- Element.Event
addEvent(type,fn):为DOM元素增加一个事件监听器 removeEvent(type,fn):移除先前为DOM元素添加的事件监听器 eg: var destroy = function ...
- Android高手进阶——Adapter深入理解与优化
Android高手进阶--Adapter深入理解与优化 通常是针对包括多个元素的View,如ListView,GridView.ExpandableListview,的时候我们是给其设置一个Adapt ...
- FastDFS概要
本篇文章是我上级老大所写. 留在这里为了不弄丢. FastDFS是一款开源的轻量级分布式文件系统 纯C实现,支持Linux, FreeBSD等UNIX系统 类google FS, 不是通用的文件系统, ...