0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#でExcelテンプレートファイルを基にエクスポート機能を作成する方法-NPOI

Last updated at Posted at 2024-11-11

NPOIを採用しています。

コード例

public ActionResult ExcelExp()
{
    ExcelExporter excelExporter = new ExcelExporter();

    // エクスポート処理
    using (var stream = new MemoryStream())
    {//※ストリームが自動的に閉じられ、リソースが解放されるため、手動で Close や Dispose を呼び出す必要はなし
  
        // テンプレートに基づいてエクスポート内容を作成
        string templatePath = Server.MapPath(ConfigurationManager.AppSettings["ExpTemp"]);
        excelExporter.ExportToStream(stream, templatePath);

        // MemoryStreamをバイト配列に変換  
        byte[] fileBytes = stream.ToArray();

        // ダウンロード用にファイルを返す
        return File(fileBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "exportedFile.xlsx");    
    }
}

public class ExcelExporter
{
    public void ExportToStream(MemoryStream stream, string templatePath)
    {
        // テンプレートファイルを読み込む
        using (var fileStream = new FileStream(templatePath, FileMode.Open, FileAccess.Read))
        {
            IWorkbook workbook = new XSSFWorkbook(fileStream);
            ISheet sheet = workbook.GetSheetAt(0);

            // セルにデータを挿入
            IRow row = sheet.GetRow(1) ?? sheet.CreateRow(1);
            ICell cell = row.GetCell(1) ?? row.CreateCell(1);
            cell.SetCellValue("Sample Data");

            // スタイルのカスタマイズ
            ICellStyle style = workbook.CreateCellStyle();
            IFont font = workbook.CreateFont();
            font.FontHeightInPoints = 12;
            font.FontName = "Arial";
            font.IsBold = true;
            style.SetFont(font);
            style.FillForegroundColor = IndexedColors.LightYellow.Index;
            style.FillPattern = FillPattern.SolidForeground;
            cell.CellStyle = style;

            // メモリストリームに書き込み
            workbook.Write(stream, true);//★★★★★
            // ストリームの位置を先頭に戻す
            stream.Position = 0;//★★★★★
        }
    }
}

ポイント

  • ★★★★★ は要注意:
    -workbook.Writeの実行にstreamを自動的に閉じないようにしておいてください
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?