ASP.NET Core使用EPPlus操作Excel

来源:https://www.cnblogs.com/cxt618/archive/2019/02/28/10451602.html
-Advertisement-
Play Games

1.前言 本篇文章通過ASP.NET Core的EPPlus包去操作Excel(導入導出),其使用原理與NPOI類似,導出Excel的時候不需要電腦上安裝office,非常好用 2.使用 新建一個ASP.NET Core Web應用程式(模型視圖控制器),還有一個類庫,SDK2.1版本,解決方案如下 ...


1.前言

  本篇文章通過ASP.NET Core的EPPlus包去操作Excel(導入導出),其使用原理與NPOI類似,導出Excel的時候不需要電腦上安裝office,非常好用

2.使用

  新建一個ASP.NET Core Web應用程式(模型視圖控制器),還有一個類庫,SDK2.1版本,解決方案如下

 

3.在EPPlusCommon類庫中創建一個EPPlusHelper類,包括兩個方法,導入和讀取數據

  1 using OfficeOpenXml;
  2 using OfficeOpenXml.Style;
  3 using System;
  4 using System.Collections.Generic;
  5 using System.Data;
  6 using System.Drawing;
  7 using System.IO;
  8 using System.Text;
  9 namespace EPPlusCommon
 10 {
 11     public class EPPlusHelper
 12     {
 13         private static int i;
 14 
 15         /// <summary>
 16         /// 導入數據到Excel中
 17         /// </summary>
 18         /// <param name="fileName"></param>
 19         /// <param name="ds"></param>
 20         public static bool ImportExcel(string fileName, DataSet ds)
 21         {
 22             if (ds == null || ds.Tables.Count == 0)
 23             {
 24                 return false;
 25             }
 26             FileInfo file = new FileInfo(fileName);
 27             if (file.Exists)
 28             {
 29                 file.Delete();
 30                 file = new FileInfo(fileName);
 31             }
 32             //在using語句裡面我們可以創建多個worksheet,ExcelPackage後面可以傳入路徑參數
 33             //命名空間是using OfficeOpenXml
 34             using (ExcelPackage package = new ExcelPackage(file))
 35             {
 36                 foreach (DataTable dt in ds.Tables)
 37                 {
 38                     //創建工作表worksheet
 39                     ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(dt.TableName);
 40                     //給單元格賦值有兩種方式
 41                     //worksheet.Cells[1, 1].Value = "單元格的值";直接指定行列數進行賦值
 42                     //worksheet.Cells["A1"].Value = "單元格的值";直接指定單元格進行賦值
 43                     worksheet.Cells.Style.Font.Name = "微軟雅黑";
 44                     worksheet.Cells.Style.Font.Size = 12;
 45                     worksheet.Cells.Style.ShrinkToFit = true;//單元格自動適應大小
 46                     for (int i = 0; i < dt.Rows.Count; i++)
 47                     {
 48                         for (int j = 0; j < dt.Columns.Count; j++)
 49                         {
 50                             worksheet.Cells[i + 1, j + 1].Value = dt.Rows[i][j].ToString();
 51                         }
 52                     }
 53                     using (var cell = worksheet.Cells[1, 1, 1, dt.Columns.Count])
 54                     {
 55                         //設置樣式:首行居中加粗背景色
 56                         cell.Style.Font.Bold = true; //加粗
 57                         cell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; //水平居中
 58                         cell.Style.VerticalAlignment = ExcelVerticalAlignment.Center;     //垂直居中
 59                         cell.Style.Font.Size = 14;
 60                         cell.Style.Fill.PatternType = ExcelFillStyle.Solid;  //背景顏色
 61                         cell.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(128, 128, 128));//設置單元格背景色
 62                     }
 63                 }
 64                 //保存
 65                 package.Save();
 66             }
 67             return true;
 68         }
 69 
 70         /// <summary>
 71         /// 讀取Excel數據
 72         /// </summary>
 73         /// <param name="fileName"></param>
 74         public static string ReadExcel(string fileName)
 75         {
 76             StringBuilder sb = new StringBuilder();
 77             FileInfo file = new FileInfo(fileName);
 78             try
 79             {
 80                 using (ExcelPackage package = new ExcelPackage(file))
 81                 {
 82                     var count = package.Workbook.Worksheets.Count;
 83                     for (int k = 1; k <= count; k++)  //worksheet是從1開始的
 84                     {
 85                         var workSheet = package.Workbook.Worksheets[k];
 86                         sb.Append(workSheet.Name);
 87                         sb.Append(Environment.NewLine);
 88                         int row = workSheet.Dimension.Rows;
 89                         int col = workSheet.Dimension.Columns;
 90                         for (int i = 1; i <= row; i++)
 91                         {
 92                             for (int j = 1; j <= col; j++)
 93                             {
 94                                 sb.Append(workSheet.Cells[i, j].Value.ToString() + "\t");
 95                             }
 96                             sb.Append(Environment.NewLine);
 97                         }
 98                         sb.Append(Environment.NewLine);
 99                         sb.Append(Environment.NewLine);
100                     }
101                 }
102             }
103             catch (Exception ex)
104             {
105                 return "An error had Happen";
106             }
107             return sb.ToString();
108         }
109     }
110 }

代碼片段已經給出了一些註釋,對於Excel的更多樣式設置可以參考博客

4.新建一個ExcelController(用於讀取和導入Excel),代碼如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using EPPlusCommon;
using Microsoft.AspNetCore.Hosting;
using System.IO;
using EPPlusWeb.Models;

namespace EPPlusWeb.Controllers
{
    public class ExcelController : Controller
    {
        private readonly IHostingEnvironment _hosting;
        public ExcelController(IHostingEnvironment hosting)
        {
            _hosting = hosting;
        }
        public IActionResult Import()
        {
            string folder = _hosting.WebRootPath;
            string fileName = Path.Combine(folder, "Excel", "Test.xlsx");
            bool result = EPPlusHelper.ImportExcel(fileName, ExcelData.GetExcelData());
            string str = result ? "導入Excel成功:" + fileName : "導入失敗";
            return Content(str);
        }
        public IActionResult Read()
        {
            string folder = _hosting.WebRootPath;
            string fileName = Path.Combine(folder, "Excel", "Test.xlsx");
            string result = EPPlusHelper.ReadExcel(fileName);
            return Content(result);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks;

namespace EPPlusWeb.Models
{
    public class ExcelData
    {
        public static DataSet GetExcelData()
        {
            DataSet ds = new DataSet();
            string[,] infos =
            {
                { "151100310001","劉備","","電腦科學與工程學院","電腦科學與技術"},
                { "151100310002","關羽","","電腦科學與工程學院","通信工程"},
                { "151100310003","張飛","","數學與統計學院","信息與計算科學"},
                { "151100310004","小喬","","文學院","漢語言文學"}
            };
            string[,] scores =
            {
                { "151100310001","劉備","88","90","80"},
                { "151100310002","關羽","86","70","75"},
                { "151100310003","張飛","67","75","81"},
                { "151100310004","小喬","99","89","92"}
            };
            DataTable stuInfoTable = new DataTable
            {
                TableName = "學生信息表"
            };
            stuInfoTable.Columns.Add("學號", typeof(string));
            stuInfoTable.Columns.Add("姓名", typeof(string));
            stuInfoTable.Columns.Add("性別", typeof(string));
            stuInfoTable.Columns.Add("學院", typeof(string));
            stuInfoTable.Columns.Add("專業", typeof(string));
            stuInfoTable.Rows.Add("學號", "姓名", "性別", "學院", "專業");
            for (int i = 0; i < infos.GetLength(0); i++)
            {
                DataRow row = stuInfoTable.NewRow();
                for (int j = 0; j < infos.GetLength(1); j++)
                {
                    row[j] = infos[i, j];
                }
                stuInfoTable.Rows.Add(row);
            }
            ds.Tables.Add(stuInfoTable);

            DataTable stuScoreTable = new DataTable
            {
                TableName = "學生成績表"
            };
            stuScoreTable.Columns.Add("學號", typeof(string));
            stuScoreTable.Columns.Add("姓名", typeof(string));
            stuScoreTable.Columns.Add("語文", typeof(string));
            stuScoreTable.Columns.Add("數學", typeof(string));
            stuScoreTable.Columns.Add("英語", typeof(string));
            stuScoreTable.Rows.Add("學號", "姓名", "語文", "數學", "英語");
            for (int i = 0; i < scores.GetLength(0); i++)
            {
                DataRow row = stuScoreTable.NewRow();
                for (int j = 0; j < scores.GetLength(1); j++)
                {
                    row[j] = scores[i, j];
                }
                stuScoreTable.Rows.Add(row);
            }
            ds.Tables.Add(stuScoreTable);
            return ds;
        }
    }
}

 

5.相關結果如下

 

 

 本文章代碼已經放在github:https://github.com/xs0910/.NET-Core-EPPlus


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 寫過C/C++的同學都知道,調用著名的malloc和new函數可以在堆上分配一塊記憶體,這塊記憶體的使用和銷毀的責任都在程式員。一不小心,就會發生記憶體泄露,搞得膽戰心驚。切換到Golang後,基本不會擔心記憶體泄露了。雖然也有new函數,但是使用new函數得到的記憶體不一定就在堆上。逃逸分析告訴你變數到底去... ...
  • 不論是面試還是正常工作需要都會用到遍歷文件夾下的所有文件,今天就記錄一下筆記。廢話不多說直接上代碼: 運行結果: 源代碼已上傳GitHub:https://github.com/cuiyuanxin/php-demo/blob/master/dir.php 純手打筆記,如有錯誤請評論提出,謝謝。 ...
  • 第二階段:提高階段 (中級PHP程式員)重點:提高針對LNMP的技能,能夠更全面的對LNMP有熟練的應用。目標:能夠隨時隨地搭建好LNMP環境,快速完成常規配置;能夠追查解決大部分遇到的開發和線上環境的問題;能夠獨立承擔中型系統的構架和開發工作;能夠在大型系統中承擔某個中型模塊的開發工作;1. Li ...
  • 事務的概念 一組要麼同時執行成功,要麼同時執行失敗的SQL語句,是資料庫操作的一個執行單元! 事務開始於: 連接到資料庫上,並執行一條DML語句(insert,update或delete),前一個事務結束後,又輸入了一條DML語句。 事務結束於: 1)執行commit或rollback語句。 2)執 ...
  • 在ASP.NET網站項目實際上線運行的過程中,有時候在運行環境下會出現400錯誤或者500錯誤,這些錯誤預設的頁面都不友好,比較簡單單調,其實我們可以自行設置這些錯誤所對應的頁面,讓這些錯誤跳轉到我們指定的路徑。此文將介紹如何在ASP.NET項目中設置404錯誤和500錯誤為例。 首先我們可以到網上 ...
  • 今天,我們將分享 Visual Studio 2019 的發佈候選版(RC 版) - 這是在 4 月 2 日的[虛擬發佈活動](https://launch.visualstudio.com/)上正式發佈之前的最後步驟之一。 您可以在 visualstudio.com/downloads 下載 RC... ...
  • 一、程式運行時產生的錯誤通過使用一種稱為異常(Exception)的機制在程式中傳遞,通過異常處理(Exception Handling)有助於處理程式運行過程中發生的意外或異常情況;異常可由CLR和客戶端代碼拋出(Throw),拋出的異常會在調用堆棧中傳遞,直到遇到可以捕獲該異常的語句進行處理並中 ...
  • 1 使用 WebShellKillerTool 進行網站文件掃描 能抓出一般後臺漏洞文件 2 控制面板-->文件夾選項-->顯示隱藏文件-->上面兩個如果是勾選狀態要去除 否則 有的文件會偽裝未受保護的系統文件 而不能被查看 3 檢查global 文件是否被篡改 4 檢查網站JS是否被註入特殊文件 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...