将 Excel 程序集作为引用添加到项目中:在“解决方案资源管理器”中找到“引用”右击,选择“添加引用”。
单击“添加引用”对话框的“COM”选项卡,找到“Microsoft Excel 11 Object Library”。
双击“Microsoft Excel 11 Object Library”,然后按“确定”。
注意:Microsoft Excel 11 Object Library中Excel 11 的版本与安装的OFFICE版本有关(OFFICE2003是Excel 11 ,OFFICE2000是Excel 9.0)。
系统平台:XP + OFFICE2003 + VS2005
在编程之前还需要引入命名空间using Microsoft.Office.Interop.Excel;
注意:有的机器上需要用using Excel;我猜这也跟OFFICE版本有关(并未确定)
这样C#就可以正确识别Excel对象了。
以下代码实现处理指定的"*.XLS"文件,在SHEET1中找到凡单元格中字符串包含子串"FW"两次的,将第二个"FW"及其后面的内容删除。
比如:FW-a001-FW-1 处理后为:FW-a001-
注:这样的单元格说不定出现在哪列(无规律)
private void OperateExcel(string excelFile)
{
Microsoft.Office.Interop.Excel.ApplicationClass excelApp = new ApplicationClass();
// 与上面提到的using Excel;相关,有时这里用Excel.ApplicationClass ,不带前面的Microsoft.Office.Interop.
excelApp.Application.Workbooks.Add(true);
excelApp.Visible = true; // 使Excel可视
excelApp.ScreenUpdating = false;
string tmp = "";
int pos = 0;
string str = "fw";
Workbook wb = excelApp.Workbooks.Open(excelFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Worksheet ws = (Worksheet)wb.ActiveSheet;//.Sheets[1];
Range rg = ws.Cells.Find(str + "*" + str, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSearchDirection.xlNext, Type.Missing, Type.Missing, Type.Missing);
while (rg != null)
{
tmp = rg.Value2.ToString();
pos = tmp.IndexOf(str) + str.Length;
pos = tmp.IndexOf(str, pos);
tmp = tmp.Remove(pos);
rg.Value2 = tmp;
rg = ws.Cells.FindNext(rg);
}
excelApp.ScreenUpdating = true;
if (!wb.Saved) // 如果“工作薄”没有保存
wb.Save(); // 将它保存
excelApp.Quit();
}
Microsoft.Office.Interop.Excel.ApplicationClass 代表整个EXCEL程序
Workbook代表1个“工作薄”对象,即1个*.XLS文件(EXCEL可以同时打开很多个Workbook,这样就构成了Workbooks)
Worksheet 代表1个“工作薄”中的“工作表”对象(sheet)(1个“工作薄”中可以同时包括很多个sheet,这样就构成了sheets)
excelApp.Application.Workbooks.Add(true);表示新建1个“工作薄”,本例中可以不要
excelApp.ScreenUpdating = false;
ScreenUpdating 属性,设置屏幕是否刷新。通过利用这个属性,您不但可以使您的 Excel 应用程序看起来更加专业,还可以使它们运行得更快--在每次修改后更新显示会严重影响代码的运行效率,特别是在大范围中通过编程方式填写时。然而,重要的是,当您完成您的工作时始终要设置这个属性,因为 Excel 不会为您重新设置它。所以在执行完修改的代码后要恢复它以确保屏幕更新恢复:excelApp.ScreenUpdating = true;
Range代表1个单元格对象。
相关文章:
如何使用 COM Interop 创建 Excel 电子表格
http://msdn2.microsoft.com/zh-CN/library/ms173186.aspx
Workbook Object
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/off2000/html/xlobjWorkbook.asp
302084 (http://support.microsoft.com/kb/302084/) 如何在 Microsoft Visual C# .NET 中使 Microsoft Excel 自动运行
http://support.microsoft.com/kb/302084/
如何使用 Visual C# 2005 或 Visual C# .NET 向 Excel 工作簿传输数据
http://support.microsoft.com/kb/306023/zh-cn#12