EPPlus

来源:https://www.cnblogs.com/xxxin/archive/2019/02/24/10428106.html
-Advertisement-
Play Games

public class EPPlus { public static string ExcelContentType { get { return "application/vnd.openxmlformats-officedocument.spreadsheetml.sh... ...


 public class EPPlus
    {
        public static string ExcelContentType
        {
            get
            {
                return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            }
        }

        #region 示例
        //public FileContentResult Export()
        //{
        //    var queryJson = Request.Params["queryJson"] + "";
        //    DataTable dt = new EternalService().GetMenuList(JObject.Parse(queryJson));
        //    goto ddd;
        //    ddd:
        //    byte[] filecontent = ExcelExportHelper.ExportExcel(dt, "", false);
        //    return File(filecontent, ExcelExportHelper.ExcelContentType, "MyMenu.xlsx");
        //}
        #endregion
        /// <summary>
        /// 導出Excel
        /// </summary>
        /// <param name="dataTable">數據源</param>
        /// <param name="heading">工作簿Worksheet</param>
        /// <param name="showSrNo">//是否顯示行編號</param>
        /// <param name="columnsToTake">要導出的列</param>
        /// <returns></returns>
        public static byte[] ExportExcel(DataTable dataTable, string heading = "", bool showSrNo = false, params string[] columnsToTake)
        {
            //建立Excel
            byte[] result = null;
            using (ExcelPackage package = new ExcelPackage())
            {
                ExcelWorksheet workSheet = package.Workbook.Worksheets.Add(string.Format("{0}Data", heading));
                //workSheet.Workbook.Properties.Title = "inventory";//設置excel的標題
                workSheet.Workbook.Properties.Author = "涼生";//作者
                //workSheet.Workbook.Properties.Comments = "this is a test";//備註
                workSheet.Workbook.Properties.Company = "xin";//公司

                int startRowFrom = string.IsNullOrEmpty(heading) ? 1 : 3;  //開始的行
                //是否顯示行編號
                if (showSrNo)
                {
                    DataColumn dataColumn = dataTable.Columns.Add("#", typeof(int));
                    dataColumn.SetOrdinal(0);
                    int index = 1;
                    foreach (DataRow item in dataTable.Rows)
                    {
                        item[0] = index;
                        index++;
                    }
                }

                //在Excel文件中添加內容
                workSheet.Cells["A" + startRowFrom].LoadFromDataTable(dataTable, true);
                // 小單元格的內容自動調整寬度
                int columnIndex = 1;
                foreach (DataColumn item in dataTable.Columns)
                {
                    ExcelRange columnCells = workSheet.Cells[workSheet.Dimension.Start.Row + 1, columnIndex, workSheet.Dimension.End.Row, columnIndex];
                    string maxValue = columnCells.Max(cell => (cell.Value ?? "").ToString());
                    int maxLength = maxValue.Count();
                    if (maxLength < 150) workSheet.Column(columnIndex).AutoFit();//自動調整寬度
                    else workSheet.Column(columnIndex).Style.WrapText = true; //自動換行
                    if (Regex.IsMatch(maxValue, @"^[+-]?\d*[.]?\d*$"))//驗證是否為數字字元串
                    {
                        workSheet.Column(columnIndex).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;//水平居中
                    }
                    if (item.DataType.Equals(Type.GetType("System.DateTime")))//驗證是否是時間
                    {
                        workSheet.Column(columnIndex).AutoFit();
                        workSheet.Column(columnIndex).Style.Numberformat.Format = "yyyy-MM-dd HH:mm:ss";
                    }
                    columnIndex++;
                }
                // 格式標題-粗體,黃色的黑色
                using (ExcelRange r = workSheet.Cells[startRowFrom, 1, startRowFrom, dataTable.Columns.Count])
                {
                    r.Style.Font.Color.SetColor(System.Drawing.Color.White);
                    r.Style.Font.Bold = true;
                    r.Style.Fill.PatternType = ExcelFillStyle.Solid;
                    r.Style.Fill.BackgroundColor.SetColor(System.Drawing.ColorTranslator.FromHtml("#1fb5ad"));
                }

                // 格式化單元格-添加邊框 
                using (ExcelRange r = workSheet.Cells[startRowFrom + 1, 1, startRowFrom + dataTable.Rows.Count, dataTable.Columns.Count])
                {
                    r.Style.Border.Top.Style = ExcelBorderStyle.Thin;
                    r.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
                    r.Style.Border.Left.Style = ExcelBorderStyle.Thin;
                    r.Style.Border.Right.Style = ExcelBorderStyle.Thin;

                    r.Style.Border.Top.Color.SetColor(System.Drawing.Color.Black);
                    r.Style.Border.Bottom.Color.SetColor(System.Drawing.Color.Black);
                    r.Style.Border.Left.Color.SetColor(System.Drawing.Color.Black);
                    r.Style.Border.Right.Color.SetColor(System.Drawing.Color.Black);
                }

                // 刪除忽略的列
                for (int i = dataTable.Columns.Count - 1; i >= 0; i--)
                {
                    if (i == 0 && showSrNo)
                    {
                        continue;
                    }
                    if (columnsToTake.Contains(dataTable.Columns[i].ColumnName))
                    {
                        workSheet.DeleteColumn(i + 1);
                    }
                }

                if (!String.IsNullOrEmpty(heading))
                {
                    workSheet.Cells["A1"].Value = heading;
                    workSheet.Cells["A1"].Style.Font.Size = 20;

                    workSheet.InsertColumn(1, 1);
                    workSheet.InsertRow(1, 1);
                    workSheet.Column(1).Width = 5;
                }

                result = package.GetAsByteArray();

            }
            return result;
        }


        #region 示例

        // public ActionResult UploadExcle(HttpPostedFileBase file)
        //{
        //    if (file == null) return Content("沒有文件!", "text/plain");
        //    var sourcePath = Path.Combine(Server.MapPath("~/tempFiles/"), Path.GetFileName(file.FileName));
        //    //建立臨時傳輸文件夾
        //    if (!Directory.Exists(Path.GetDirectoryName(sourcePath)))
        //        Directory.CreateDirectory(sourcePath);
        //    file.SaveAs(sourcePath);
        //    DataSet dt = ExcelToTable.ReadExcelToDataSet(sourcePath);
        //    //處理數據
        //    //。。。。。。
        //    //刪除文件
        //    System.IO.File.Delete(sourcePath);
        //    return Content("");
        //} 
        #endregion
        /// <summary>
        /// 導入
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public static DataSet ReadExcelToDataSet(string filePath)
        {
            DataSet ds = new DataSet("ds");
            DataRow dr;
            object objCellValue;
            string cellValue;
            using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite))
            using (ExcelPackage package = new ExcelPackage())
            {
                package.Load(fs);
                foreach (var sheet in package.Workbook.Worksheets)
                {
                    if (sheet.Dimension == null) continue;
                    var columnCount = sheet.Dimension.End.Column;//獲取worksheet的列數
                    var rowCount = sheet.Dimension.End.Row; //獲取worksheet的行數
                    if (rowCount > 0)
                    {
                        DataTable dt = new DataTable(sheet.Name);
                        for (int j = 0; j < columnCount; j++)//設置DataTable列名  
                        {
                            objCellValue = sheet.Cells[1, j + 1].Value;
                            cellValue = objCellValue == null ? "" : objCellValue.ToString();
                            dt.Columns.Add(cellValue, typeof(string));
                        }
                        for (int i = 2; i <= rowCount; i++)
                        {
                            dr = dt.NewRow();
                            for (int j = 1; j <= columnCount; j++)
                            {
                                objCellValue = sheet.Cells[i, j].Value;
                                cellValue = objCellValue == null ? "" : objCellValue.ToString();
                                dr[j - 1] = cellValue;
                            }
                            dt.Rows.Add(dr);
                        }
                        ds.Tables.Add(dt);
                    }
                }
            }
            return ds;

        }
    }

 


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

-Advertisement-
Play Games
更多相關文章
  • 使用maven package打包項目時出現配置文件丟失的現象,此類問題解決辦法如下: 在web項目pom.xml 文件中添加如下: 在<build>標簽中添加如下配置: 說明:<include>標簽中配置自己項目中配置文件的尾碼名稱就闊以; 完畢! ...
  • 一、vector類型簡介 標準庫:集合或動態數組,我們可以放若幹對象放在裡面。 vector他能把其他對象裝進來,也被稱為容器 二、定義和初始化vector對象 (1)空的vector (2)元素拷貝的初始化方式 (3)C++11標準中,用列表初始化方法給值,用{}括起來 (4)創建指定數量的元素 ...
  • 原文地址:http://www.runoob.com/python/python-func-open.html ...
  • 一、前言 int,float,char,C++標準庫提供的類型:string,vector。 string:可變長字元串的處理;vector一種集合或者容器的概念。 二、string類型簡介 C++標準庫中的類型,代表一個可變長的字元串 char str[100] = “I Love China”; ...
  • 對二維數組指定的鍵名排序,首先大家想到的是array_multisort函數,關於array_multisort的用法我之前也寫了一篇廢話不多言,我們看個實例: 細心的朋友會看到,鍵名重置了,鍵名從0開始,顯然這可能不是我們想要的結果,那如何保持鍵名不變? 我們再看個示例: 這裡我們也可以精簡下ar ...
  • 一、前言 在非靜態頁面的項目開發中,必定會涉及到對於資料庫的訪問,最開始呢,我們使用 Ado.Net,通過編寫 SQL 幫助類幫我們實現對於資料庫的快速訪問,後來,ORM(Object Relational Mapping,對象關係映射)出現了,我們開始使用 EF、Dapper、NHibernate ...
  • 百度一下資料庫事務隔離,臟讀等,我想也是一堆。有些老學究扯一堆理論,有些通篇全是代碼,都讓人看的有種說不出蛋疼的感覺。本文用圖文並茂的方式,配上行雲流水般的代碼,非要擺清楚這個問題。本文代碼已提交至碼雲(點擊這裡下載)。 事務是現代關係型資料庫的核心之一。在多個事務併發操作資料庫(多線程、網路併發等 ...
  • 先準備一個耗時方法 /// <summary>/// 耗時方法/// </summary>/// <param name="name"></param>private void DoSomeThing(string name){ Console.WriteLine($"開始執行{name}, {Th ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...