Excelで列と行全体の削除をサポートするライブラリを見つけたいです。残念ながら、EPPLUS と NPOI はこれをサポートしておらず、ロードマップにもこの機能について言及されていません。
現在、幅と高さをゼロに設定していますが、これは最善の解決策ではありません。Excel列全体を削除する.Netサポートに無料のライブラリはありますか?
プロジェクトで Microsoft Excel 10.0 Object Library を参照します。
次の 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);