C#中对Excel的操作相关的说明已经很多了,本文只做简单的步骤说明:
1、添加COM引用:Microsoft.Excel.x.0.Object.Library,Microsoft.Office.x.0.Object.Library。
2、使用Workbooks,Workbook,Worksheets,Worksheet等对象实例完成功能实现。
3、释放资源。---但在此处需要着重注意,当程序调用Excel时,会生成一个Excel.exe进程(在任务管理器中可以看到),如果处理不当,则在程序关闭之前会该进程会一直存在。并且如果由于代码逻辑的需要,每次调用一个Excel实例,就会生成一个Excel.exe进程,那么就会出现越来越多的Excel.exe进程,一定程度上会大量浪费计算机资源。所以,针对这种情况,最好要在Excel实例使用完毕时进行合理的资源释放,将Excel.exe进程杀掉。网上类似的讨论很多,我实际测试了一下,有一种方式可以确实有效的将Excel.exe进程杀掉:那就是GC.Collect(),也就是强制进行垃圾回收。但是它的使用也有技巧,不要将GC.Collect()与Excel的调用放在一起,否则也许会无法杀掉Excel.exe进程。
以下是我写的一个简单的demo:
- //类实现
- using System;
- using System.Collections.Generic;
- using System.Text;
- using Microsoft.Office.Interop.Excel;
- using Microsoft.Office.Core;
- namespace XXX
- {
- class ExcelCtrl
- {
- private ApplicationClass m_Excel;
- private Workbook m_Book;
- private Worksheet m_Sheet;
- private Range m_Range;
- public int m_RowsCount;
- public ExcelCtrl(string ExcelFile, string ExcelSheet)
- {
- try
- {
- m_Excel = new ApplicationClass();
- m_Book = m_Excel.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);
- m_Sheet = (Worksheet)m_Book.Worksheets[ExcelSheet];
- m_RowsCount = m_Sheet.UsedRange.Cells.Rows.Count;
- }
- catch (System.Exception ex)
- {
- throw ex;
- }
- }
- public string ReadShell(string ShellPos)
- {
- try
- {
- m_Range = m_Sheet.get_Range(ShellPos, Type.Missing);
- return m_Range.Text.ToString().Trim();
- }
- catch (System.Exception ex)
- {
- throw ex;
- }
- }
- public void Dispose()
- {
- try
- {
- m_Book.Close(Type.Missing, Type.Missing, Type.Missing);
- m_Excel.Quit();
- System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Excel);
- System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Book);
- System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Sheet);
- System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Range);
- m_Excel = null;
- m_Book = null;
- m_Sheet = null;
- m_Range = null;
- }
- catch (System.Exception ex)
- {
- throw ex;
- }
- }
- }
- }
- //类调用
- private void Button1_Click(object sender, EventArgs e)
- {
- ExcelCtrl excel = null;
- string strTest;
- try
- {
- ExcelCtrl excel = new ExcelCtrl("test.xls", "Sheet1");
- try
- {
- strTest = excel.ReadShell("A1");
- }
- finally
- {
- excel.Dispose();
- }
- }
- catch (System.Exception ex)
- {
- MessageBox.Show(ex.Message);
- return;
- }
- finally
- {
- GC.Collect();
- }
- }