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