{"id":545,"date":"2022-09-27T14:34:36","date_gmt":"2022-09-27T05:34:36","guid":{"rendered":"https:\/\/sumomo.ohwaki.jp\/wordpress\/?p=545"},"modified":"2022-12-13T10:42:37","modified_gmt":"2022-12-13T01:42:37","slug":"closedxml","status":"publish","type":"post","link":"https:\/\/sumomo.ohwaki.jp\/wordpress\/?p=545","title":{"rendered":"ClosedXML"},"content":{"rendered":"\n<p>.NET\u4e0a\u304b\u3089Excel\u30d5\u30a1\u30a4\u30eb\u3092\u64cd\u4f5c\u3059\u308b\u306e\u306b\u3001\u79c1\u306f\u4eca\u307e\u3067\u3001epplus\u3092\u4f7f\u7528\u3057\u3066\u304d\u305f\u304c\u3001\u3054\u5b58\u3058\u306e\u901a\u308a\u3001epplus(5.x\u4ee5\u964d)\u304c\u6709\u511f\u5316\u3055\u308c\u3066\u3057\u307e\u3063\u3066\u304b\u3089\u304b\u306a\u308a\u6642\u9593\u304c\u7d4c\u3064\u3002<\/p>\n\n\n\n<p>\u4ed5\u65b9\u306a\u304fepplus\u306e\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3(4.x)\u3092\u4f7f\u3063\u3066\u3044\u305f\u3051\u308c\u3069\u3001\u4f55\u304b\u4ed6\u306b\u4ee3\u308f\u308a\u306b\u306a\u308b\u7269\u304c\u306a\u3044\u306e\u304b\u63a2\u3057\u3066\u307f\u305f\u3002<\/p>\n\n\n\n<p>poi\u306e.NET\u30dd\u30fc\u30c6\u30a3\u30f3\u30b0\u3067\u3042\u308b\u3001npoi\u304c\u6709\u308b\u3053\u3068\u3082\u77e5\u3063\u3066\u3044\u305f\u304c\u3001\u3053\u3061\u3089\u306f\u5c11\u3005\u4f7f\u3044\u52dd\u624b\u304c\u60aa\u3044\u306e\u3067\u4e0d\u63a1\u7528\u3002<\/p>\n\n\n\n<p>epplus\u306e\u3088\u3046\u306a\u4f7f\u3044\u52dd\u624b\u306e\u3082\u306e\u3092\u63a2\u3057\u3066\u3044\u305f\u3089\u3001ClosedXML\u3068\u3044\u3046\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u898b\u3064\u3051\u305f\u3002(\u79c1\u304c\u77e5\u3089\u306a\u3044\u3060\u3051\u3067\u3001\u7d50\u69cb\u6709\u540d\u3089\u3057\u3044\u3002)<\/p>\n\n\n\n<p>ClosedXML\u306fnuget\u304b\u3089\u30d1\u30c3\u30b1\u30fc\u30b8\u53d6\u5f97\u304c\u53ef\u80fd\u3002<\/p>\n\n\n\n<p>\u3053\u3061\u3089\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u3001npoi\u3088\u308a\u3082epplus\u5bc4\u308a\u306e\u4f7f\u3044\u52dd\u624b\u3067\u3001\u4e2d\u3005\u826f\u3055\u305d\u3046\u3060\u3002\u305f\u3060\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u3001\u6700\u65b0\u3067\u3082\u30010.96.0\u3067\u30011.0\u4ee5\u4e0b\u306a\u306e\u3067\u3001\u305d\u306e\u8fba\u306f\u3069\u3046\u306a\u306e\u3060\u308d\u3046\u304b\u30fb\u30fb\u30fb<\/p>\n\n\n\n<p>\u30c1\u30e7\u30c3\u30c8\u4f7f\u3063\u3066\u307f\u305f\u611f\u3058\u3067\u306f\u7279\u306b\u52d5\u4f5c\u306b\u554f\u984c\u306f\u7121\u3055\u305d\u3046\u3060\u3002\u305f\u3060\u3001\u304d\u3061\u3093\u3068\u6e2c\u3063\u3066\u3044\u306a\u3044\u304c\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304cepplus\u3088\u308a\u60aa\u3044\u611f\u3058\u304c\u3059\u308b\u3002<\/p>\n\n\n\n<p>\u307e\u3041\u3001\u7c21\u5358\u306aExcel\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u308b\u304f\u3089\u3044\u306a\u3089\u554f\u984c\u306f\u7121\u3055\u305d\u3046\u3060\u304c\u30fb\u30fb\u30fb<\/p>\n\n\n\n<p>\u4e0b\u8a18\u304c\u3001\u7c21\u5358\u306a\u30b5\u30f3\u30d7\u30eb\u3002npoi\u3088\u308a\u4f7f\u3044\u52dd\u624b\u3044\u3044\u3067\u3057\u3087?<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-csharp\" data-file=\"ClosedXML\u30b5\u30f3\u30d7\u30eb\" data-lang=\"C#\"><code>using(var wb = new XLWorkbook()) {\n    var ws = wb.Worksheets.Add(&quot;MySheet&quot;);\n    \/\/ \u30bb\u30eb\u7d50\u5408\n    ws.Range(1,1,1,10).Merge();\n    ws.Cell(1,1).Value = &quot;ClosedXML Test&quot;;\n    \/\/ \u6587\u5b57\u914d\u7f6e\n    ws.Cell(1,1).Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);\n\n    for(int i=1; i &lt;= 10; i++) {\n        for(int j=1; j &lt;= 10; j++) {\n            ws.Cell(i+2,j).Value = i*j;\n        }\n        var xrng = ws.Range(i+2,1,i+2,10);\n        if ((i%2) == 0) {\n            \/\/ \u30bb\u30eb\u80cc\u666f\u8272\n            xrng.Style.Fill.SetPatternType(XLFillPatternValues.Solid);\n            xrng.Style.Fill.SetBackgroundColor(XLColor.AirForceBlue);\n        }\n    }\n\n    for(int i=0; i &lt; 10; i++) {\n        \/\/ Excel\u95a2\u6570\n        char c = (char)(&#39;A&#39;+i);\n        ws.Cell(13,i+1).SetFormulaA1($&quot;=SUM({c}3:{c}12)&quot;);\n    }\n\n    \/\/ \u7f6b\u7dda\n    var rng = ws.Range(3,1,13,10);\n    rng.Style.Border.SetOutsideBorder(XLBorderStyleValues.Thin);\n    rng.Style.Border.SetInsideBorder(XLBorderStyleValues.Thin);\n\n    \/\/ \u5e45\u81ea\u52d5\u8abf\u6574\n    ws.Columns(1,10).AdjustToContents();\n\n\t\/\/ \u4fdd\u5b58\n    wb.SaveAs(filename);\n}<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"605\" height=\"424\" src=\"https:\/\/sumomo.ohwaki.jp\/wordpress\/wp-content\/uploads\/2022\/09\/ClosedXML.png\" alt=\"\" class=\"wp-image-547\" srcset=\"https:\/\/sumomo.ohwaki.jp\/wordpress\/wp-content\/uploads\/2022\/09\/ClosedXML.png 605w, https:\/\/sumomo.ohwaki.jp\/wordpress\/wp-content\/uploads\/2022\/09\/ClosedXML-300x210.png 300w\" sizes=\"auto, (max-width: 605px) 100vw, 605px\" \/><figcaption class=\"wp-element-caption\">\u7d50\u679c<\/figcaption><\/figure>\n\n\n\n<p>SaveAs\u30e1\u30bd\u30c3\u30c9\u306fStream\u306b\u66f8\u304d\u51fa\u3059\u3053\u3068\u3082\u53ef\u80fd\u306a\u306e\u3067\u3001WebApp\u3067\u306f\u3001MemoryStream\u306b\u66f8\u304d\u51fa\u3057\u3066\u3001FileResult\u3092\u8fd4\u3059\u3053\u3068\u306b\u3088\u3063\u3066\u4f5c\u6210\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3082\u53ef\u80fd\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-csharp\" data-file=\"WebApp\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\" data-lang=\"C#\"><code>public async Task&lt;IActionResult&gt; OnPostAsync() {\n\t\u30fb\u30fb\u30fb\n\t\/\/ \u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\n\tusing(MemoryStream stm = new MemoryStream()) {\n\t    wb.SaveAs(stm);\n\t    await stm.FlushAsync();\n\t    byte[] buf = stm.ToArray();\n\t    return File(buf,&quot;application\/octet-stream&quot;,FileName);\n\t}\n}<\/code><\/pre><\/div>\n\n\n\n<p>Workbook(XLWorkbook)\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306b\u3001\u30d5\u30a1\u30a4\u30eb\u540d\u3084Stream\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001Excel\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3081\u308b\u306e\u3067\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u7684\u306a\u4f7f\u3044\u65b9\u3082\u53ef\u80fd\u3002<\/p>\n\n\n\n<p>\u30c1\u30e7\u30c3\u30c8\u4f7f\u3044\u8fbc\u3093\u3067\u307f\u3088\u3046\u304b\u306a\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>.NET\u4e0a\u304b\u3089Excel\u30d5\u30a1\u30a4\u30eb\u3092\u64cd\u4f5c\u3059\u308b\u306e\u306b\u3001\u79c1\u306f\u4eca\u307e\u3067\u3001epplus\u3092\u4f7f\u7528\u3057 &hellip; <a href=\"https:\/\/sumomo.ohwaki.jp\/wordpress\/?p=545\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18,9,4],"tags":[],"class_list":["post-545","post","type-post","status-publish","format-standard","hentry","category-net","category-c","category-4"],"_links":{"self":[{"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/545","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=545"}],"version-history":[{"count":6,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/545\/revisions"}],"predecessor-version":[{"id":599,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/545\/revisions\/599"}],"wp:attachment":[{"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=545"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=545"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=545"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}