.Net是否有任何免费图书馆支持删除整个Excel列?

时间:2012-08-16 02:14:52

标签: excel npoi

我想找一个支持删除excel中整个列和行的库。不幸的是,EPPLUS和NPOI不支持这一点,他们的路线图没有提到这个功能。

目前,我将宽度和高度设置为零,但它不是最佳解决方案。 .Net是否有任何免费图书馆支持删除整个Excel列?

1 个答案:

答案 0 :(得分:0)

引用项目中的Microsoft Excel 10.0对象库。

设置以下using语句:

using Excel = Microsoft.Office.Interop.Excel;

在您的班级中,声明以下变量:

private Excel.Application _app;
private Excel.Workbooks _books;
private Excel.Workbook _book;
protected Excel.Sheets _sheets;
protected Excel.Worksheet _sheet;

然后按以下方法打开工作簿:

protected void OpenExcelWorkbook(string fileName) 
{
_app = new Excel.Application();

if (_book == null) 
{
_books = _app.Workbooks;
_book = _books.Open(fileName, 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);
_sheets = _book.Worksheets;
}
}

确保您有一个关闭工作簿的方法

protected void CloseExcelWorkbook() {
_book.Save();
_book.Close(false, Type.Missing, Type.Missing);
}

并且您需要一种方法来清理对Excel对象的引用(因为它们是COM),否则Excel将继续运行。

protected void NAR(object o) {

try {
if(o != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
}

finally {
o = null;
}
}

现在,您可以选择要删除行的工作表:

OpenExcelWorkbook(@"d:\temp\yourworkbook.xls");
_sheet = (Excel.Worksheet)_sheets[1];
_sheet.Select(Type.Missing);
Excel.Range range = _sheet.get_Range("A7:A7", Type.Missing);
range.Delete(Excel.XlDeleteShiftDirection.xlShiftUp);
NAR(range);
NAR(_sheet);
CloseExcelWorkbook();
NAR(_book);
_app.Quit();
NAR(_app);