web-dev-qa-db-ja.com

EPPLUS Excel Libraryで列をフォーマットする

Excelスプレッドシートを作成するC#プログラムを作成しました。シートには複数の列があります。列の1つをフォーマットします。

aFile = new FileInfo(excelDocName); // excelDocName is a string
ExcelPackage pck = new ExcelPackage(aFile);
var ws = pck.Workbook.Worksheets.Add("Content");
ws.View.ShowGridLines = true;
ws.Cells["B:B"].Style.Numberformat.Format = "0.00";
ws.Cells[1, 1].Value = "AA";
ws.Cells[1, 2].Value = "BB";
ws.Cells[1, 3].Value = "CC";
ws.Cells[1, 4].Value = "DD";
for (int row = 2; row <= 10; ++row)
  for (int col = 1; col <= 4; ++col)
  {
  ws.Cells[row, col].Value = row * col;
  }
ws.Row(1).Style.Font.Bold = true;
pck.Save();

問題は、列を正しくフォーマットしている間、指定した列だけでなく、そのフォーマットで他の列もフォーマットしていることです。私も試しました:

ws.Column(1).Style.Numberformat.Format = "0.00";

これはバグですか、それとも何か不足していますか?

12
elbillaf

既存のファイルを開いていますか?開く前に、他の列に既に適用されているフォーマットがある場合があります。またはastianのようなテンプレート。

このような場合に備えて、すべてのフォーマットをクリアします。

ws.Cells["A:D"].Style.Numberformat.Format = null;
ws.Cells["B:B"].Style.Numberformat.Format = "0.00";

EPPlus 4.0.3のフルユニットテスト:

[TestMethod]
public void Format_Single_Column_Test()
{
    //http://stackoverflow.com/questions/28698226/formatting-a-column-with-epplus-Excel-library
    var excelDocName = @"c:\temp\temp.xlsx";
    var aFile = new FileInfo(excelDocName); // excelDocName is a string

    if (aFile.Exists)
        aFile.Delete();

    ExcelPackage pck = new ExcelPackage(aFile);
    var ws = pck.Workbook.Worksheets.Add("Content");
    ws.View.ShowGridLines = true;
    ws.Cells["A:D"].Style.Numberformat.Format = null;
    ws.Cells["B:B"].Style.Numberformat.Format = "0.00";
    ws.Cells[1, 1].Value = "AA";
    ws.Cells[1, 2].Value = "BB";
    ws.Cells[1, 3].Value = "CC";
    ws.Cells[1, 4].Value = "DD";
    for (int row = 2; row <= 10; ++row)
        for (int col = 1; col <= 4; ++col)
        {
            ws.Cells[row, col].Value = row*col;
        }
    ws.Row(1).Style.Font.Bold = true;
    pck.Save();
}
16
Ernie S