我想找到一个支持在 excel 中删除整个列和行的库。不幸的是,EPPLUS 和 NPOI 不支持这个,他们的路线图也没有提到这个功能。
目前,我将宽度和高度设置为零,但这不是最佳解决方案。.Net 中是否有任何免费库支持删除整个 excel 列?
在您的项目中引用 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);