web-dev-qa-db-ja.com

epplusでExcelシートから列を削除する方法

私はcsharpを使用して、Excelシートの7列にデータを挿入しています。このプログラムのインターフェースにより、ユーザーは7つのチェックボックスを選択できます。 7つすべてを選択すると、spreadhseetの7つの列すべてにデータが含まれ、1つのチェックボックスを選択すると、1つの列のみにデータが含まれます。データが存在するかどうかを確認するforループがあります。データが存在しない場合は、epplusでその列を削除します。このトピックに関する以前の議論は次のとおりです WebアプリでEPPlusを使用してXLSXファイルの列を削除するにはどうすればよいですか 古いので、これを行う方法があるかどうかを確認したいと思います。または、epplusExcelシートをMicrosoft相互運用Excelシートにキャストしていくつかの操作を実行する方法はありますか。

現在、私は次のようにコーディングしています:

for(int j=1; j <= 9; j++) //looping through columns
{
int flag = 0;
for(int i = 3; i <= 10; i++) // looping through rows
{
    if(worksheet.cells[i, j].Text != "")
    {
        flag ++;
    }
}
if (flag == 0)
{
     worksheet.column[j].hidden = true; // hiding the columns- want to  remove it
}
}

次のようなことができますか?

Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
xlApp = worksheet; (where worksheet is epplus worksheet)
10
sanmis

EPPlus 4を使用していますか?列の挿入と削除を行う機能は、実装された新しいセルストアモデルで追加されました。したがって、次のようなことができます。

[TestMethod]
public void DeleteColumn_Test()
{
    //http://stackoverflow.com/questions/28359165/how-to-remove-a-column-from-Excel-sheet-in-epplus

    var existingFile = new FileInfo(@"c:\temp\temp.xlsx");
    if (existingFile.Exists)
        existingFile.Delete();

    //Throw in some data
    var datatable = new DataTable("tblData");
    datatable.Columns.Add(new DataColumn("Col1"));
    datatable.Columns.Add(new DataColumn("Col2"));
    datatable.Columns.Add(new DataColumn("Col3"));

    for (var i = 0; i < 20; i++)
    {
        var row = datatable.NewRow();
        row["Col1"] = "Col1 Row" + i;
        row["Col2"] = "Col2 Row" + i;
        row["Col3"] = "Col3 Row" + i;
        datatable.Rows.Add(row);
    }

    using (var pack = new ExcelPackage(existingFile))
    {

        var ws = pack.Workbook.Worksheets.Add("Content");
        ws.Cells.LoadFromDataTable(datatable, true);
        ws.DeleteColumn(2);

        pack.SaveAs(existingFile);
    }
}
12
Ernie S