1

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

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

4

1 回答 1

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);
于 2012-08-16T05:58:34.690 回答