[C#]使用Gembox.SpreadSheet向Excel寫入數據及圖表

来源:http://www.cnblogs.com/cncc/archive/2017/12/06/7992383.html
-Advertisement-
Play Games

本文為原創文章、源代碼為原創代碼,如轉載/複製,請在網頁/代碼處明顯位置標明原文名稱、作者及網址,謝謝! 開發工具:VS2017 語言:C# DotNet版本:.Net FrameWork 4.0及以上 使用的DLL工具名稱:GemBox.Spreadsheet.dll (版本:37.3.30.11 ...


 


本文為原創文章、源代碼為原創代碼,如轉載/複製,請在網頁/代碼處明顯位置標明原文名稱、作者及網址,謝謝!


開發工具:VS2017

語言:C#

DotNet版本:.Net FrameWork 4.0及以上

使用的DLL工具名稱:GemBox.Spreadsheet.dll (版本:37.3.30.1185)

一、GemBox.Spreadsheet工具:

該DLL是由GemBox公司開發的基於Excel功能的開發工具,該DLL很輕量,且使用起來很方便,在這裡推薦下來來使用。

下載地址:

https://pan.baidu.com/s/1slcBUqh

本文就是使用該工具進行Excel的寫入操作。

二、創建Excel

為了能使用該DLL,必須在調用前寫入以下代碼:

SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");

創建Excel文件如下:

ExcelFile excel = new ExcelFile();

這裡僅僅只是創建一個excel,代表的是excel整個文件,而保存該文件的代碼如下:

excel.Save("文件路徑");

三、給Excel添加一些屬性

我們可以給excel添加一些諸如文檔標題、作者、公司及備註等內容,實現這些內容的代碼如下:

excel.DocumentProperties.BuiltIn.Add(new KeyValuePair<BuiltInDocumentProperties, string>(BuiltInDocumentProperties.Title, TITLE));
excel.DocumentProperties.BuiltIn.Add(new KeyValuePair<BuiltInDocumentProperties, string>(BuiltInDocumentProperties.Author, "CNXY"));
excel.DocumentProperties.BuiltIn.Add(new KeyValuePair<BuiltInDocumentProperties, string>(BuiltInDocumentProperties.Company, "CNXY"));
excel.DocumentProperties.BuiltIn.Add(new KeyValuePair<BuiltInDocumentProperties, string>(BuiltInDocumentProperties.Comments, "By CNXY.Website: http://www.cnc6.cn"));

四、給excel預設字體

這是給整個Excel設置統一的字體,具體代碼如下:

excel.DefaultFontName = "Times New Roman";

五、添加一個Sheet表格

要知道,Excel是由Sheet表格構成的,因此添加Sheet表格的代碼如下:

ExcelWorksheet sheet = excel.Worksheets.Add("表格名稱");

以上,已經在excel上添加了一個名為“表格名稱”的數據表格。

六、給Sheet添加密碼保護

有時候,為了保護自己的Excel不被篡改,需要設置一下Sheet的密碼,具體代碼如下:

sheet.ProtectionSettings.SetPassword("cnxy");
sheet.Protected = true;

七、讓網格線不可見

預設情況下,Sheet的網格線是可見的,有時候,我們可以設置網格線不可見,具體代碼如下:

sheet.ViewOptions.ShowGridLines = false;

八、寫入單元格

訪問單元格的方式有三種,三種分別如下:

sheet.Cells["A1"]
sheet.Cells[0,0]
sheet.Rows[0].Cells[0]

以上三種方法都可以訪問單元格,但如下寫入單元格呢,其實方法很簡單,如下:

sheet.Cells["A1"].Value= 內容

以上沒有加雙引號的原因是:內容不一定是字元串,有可能是數字、日期等。

九、單元格樣式設置

單元格設置需要使用CellStyle對象,其代碼如下:

CellStyle style = new CellStyle();
//設置水平對齊模式
style.HorizontalAlignment = HorizontalAlignmentStyle.Center;
//設置垂直對齊模式
style.VerticalAlignment = VerticalAlignmentStyle.Center;
//設置字體
style.Font.Size = 22 * PT; //PT=20
style.Font.Weight = ExcelFont.BoldWeight;
style.Font.Color = Color.Blue;
sheet.Cells["A1"].Style = style;

填充方式如下:

sheet.Cells[24,1].Style.FillPattern.PatternStyle = FillPatternStyle.Solid;          
sheet.Rows[24].Cells[1].Style.FillPattern.PatternForegroundColor = Color.Gainsboro;

設置邊框如下:

style.Borders.SetBorders(MultipleBorders.Outside, Color.Black, LineStyle.Thin);

十、合併單元格

合併單元格需使用CellRange對象,我們可以從sheet.Cells.GetSubrange或GetSubrangeAbsolute獲得,代碼如下:

CellRange range = sheet.Cells.GetSubrange("B2", "J3");
range.Value = "Chart";
range.Merged = true;
sheet.Cells.GetSubrangeAbsolute(24, 1, 24, 9).Merged = true;

十一、創建Chart圖表對象

使用的是LineChart對象,代碼如下:

LineChart chart =(LineChart)sheet.Charts.Add(ChartType.Line,"B4","J22");

以上意思是從B4到J22創建一個LineChart對象。

設置圖表標題不可見,代碼如下:

chart.Title.IsVisible = false;

設置X軸與Y軸的標題可見,代碼如下:

chart.Axes.Horizontal.Title.Text = "Time";
chart.Axes.Vertical.Title.Text = "Voltage";

十二、給Y軸設置屬性

主要使用了chart.Axes.VerticalValue返回的ValueAxis對象,代碼如下:

ValueAxis axisY =  chart.Axes.VerticalValue;
//Y軸最大刻度與最小刻度
axisY.Minimum = -100;
axisY.Maximum = 100;
//Y軸主要與次要單位大小
axisY.MajorUnit = 20;
axisY.MinorUnit = 10;
//Y軸主要與次要網格是否可見
axisY.MajorGridlines.IsVisible = true;
axisY.MinorGridlines.IsVisible = true;
//Y軸刻度線類型
axisY.MajorTickMarkType = TickMarkType.Cross; 
axisY.MinorTickMarkType = TickMarkType.Inside;

十三、附上完整的源代碼

using GemBox.Spreadsheet;
using GemBox.Spreadsheet.Charts;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;

namespace SpreadSheetChartDemo
{
    class Program
    {
        const int PT = 20;
        const int LENGTH = 200;
        const string TIMESNEWROMAN = "Times New Roman";
        const string TITLE = "Spread Sheet Chart Demo";
        static void Main(string[] args)
        {
            SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");
            ExcelFile excel = new ExcelFile();
            //Excel預設字體
            excel.DefaultFontName = TIMESNEWROMAN;
            //Excel文檔屬性設置
            excel.DocumentProperties.BuiltIn.Add(new KeyValuePair<BuiltInDocumentProperties, string>(BuiltInDocumentProperties.Title, TITLE));
            excel.DocumentProperties.BuiltIn.Add(new KeyValuePair<BuiltInDocumentProperties, string>(BuiltInDocumentProperties.Author, "CNXY"));
            excel.DocumentProperties.BuiltIn.Add(new KeyValuePair<BuiltInDocumentProperties, string>(BuiltInDocumentProperties.Company, "CNXY"));
            excel.DocumentProperties.BuiltIn.Add(new KeyValuePair<BuiltInDocumentProperties, string>(BuiltInDocumentProperties.Comments, "By CNXY.Website: http://www.cnc6.cn"));
            //新建一個Sheet表格
            ExcelWorksheet sheet = excel.Worksheets.Add(TITLE);
            //設置表格保護
            sheet.ProtectionSettings.SetPassword("cnxy");
            sheet.Protected = true;
            //設置網格線不可見
            sheet.ViewOptions.ShowGridLines = false;
            //定義一個B2-G3的單元格範圍
            CellRange range = sheet.Cells.GetSubrange("B2", "J3");
            range.Value = "Chart";
            range.Merged = true;
            //定義一個單元格樣式
            CellStyle style = new CellStyle();
            //設置邊框
            style.Borders.SetBorders(MultipleBorders.Outside, Color.Black, LineStyle.Thin);
            //設置水平對齊模式
            style.HorizontalAlignment = HorizontalAlignmentStyle.Center;
            //設置垂直對齊模式
            style.VerticalAlignment = VerticalAlignmentStyle.Center;
            //設置字體
            style.Font.Size = 22 * PT;
            style.Font.Weight = ExcelFont.BoldWeight;
            style.Font.Color = Color.Blue;
            range.Style = style;
            //增加Chart
            LineChart chart = (LineChart)sheet.Charts.Add(ChartType.Line,"B4","J22");
            chart.Title.IsVisible = false;
            chart.Axes.Horizontal.Title.Text = "Time";
            chart.Axes.Vertical.Title.Text = "Voltage";
            ValueAxis axisY =  chart.Axes.VerticalValue;
            //Y軸最大刻度與最小刻度
            axisY.Minimum = -100;
            axisY.Maximum = 100;
            //Y軸主要與次要單位大小
            axisY.MajorUnit = 20;
            axisY.MinorUnit = 10;
            //Y軸主要與次要網格是否可見
            axisY.MajorGridlines.IsVisible = true;
            axisY.MinorGridlines.IsVisible = true;
            //Y軸刻度線類型
            axisY.MajorTickMarkType = TickMarkType.Cross; 
            axisY.MinorTickMarkType = TickMarkType.Inside;
            Random random = new Random();
            double[] data = new double[LENGTH];
            for (int i=0;i< LENGTH; i++)
            {
               if( random.Next(0,100) > 50)
                    data[i] = random.NextDouble() * 100;
               else
                    data[i] = -random.NextDouble() * 100;
            }
            chart.Series.Add("Random", data);

            //尾部信息
            range = sheet.Cells.GetSubrange("B23", "J24");
            range.Value = $"Write Time:{DateTime.Now:yyyy-MM-dd HH:mm:ss} By CNXY";
            range.Merged = true;
            //B25(三種單元格模式)
            sheet.Cells["B25"].Value = "http://www.cnc6.cn";
            sheet.Cells[24,1].Style.FillPattern.PatternStyle = FillPatternStyle.Solid;
            sheet.Rows[24].Cells[1].Style.FillPattern.PatternForegroundColor = Color.Gainsboro;
            //B25,J25
            sheet.Cells.GetSubrangeAbsolute(24, 1, 24, 9).Merged = true;
            string filePath = $@"{Environment.CurrentDirectory}\SheetChart.xlsx";
            try
            {
                excel.Save(filePath);
                Process.Start(filePath);
                Console.WriteLine("Write successfully");
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex);
            }
            Console.Write("Press any key to continue.");
            Console.ReadKey();
        }
    }
}

十四、生成的Excel

演示的Excel下載地址:

https://pan.baidu.com/s/1slDPAED

十五、生成的exe

下載地址如下:

https://pan.baidu.com/s/1nvefYvJ

運行結果如下:

 


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

-Advertisement-
Play Games
更多相關文章
  • 之前一直使用Enum.Parse()將字元串轉為枚舉,沒有深究,後面發現一個問題後對下麵的Enum有了一個初步研究(.net 4.0).看下麵代碼. 首先定義一個test枚舉 結論,對於Enum.Parse() 方法,即使是想通過TryParse()方法判斷返回的bool值,也建議首先使用Enum. ...
  • 原始數據: 要處理為: 最終處理為: 好吧,我們創建一個類: class Ae { private string _InputValue; private char _Delimiter; public Ae(string inputValue, char delimiter) { this._In ...
  • 序列化簡單的說就是把對象的位元組序列永久的保存到硬碟上,但是一些文件操作類也能實現把對象保存到本地(文件流保存XML文件),在存儲對象的結果上是沒有什麼差別的(序列化能保存對象的類型[pototype],而文件操作不能),只不過最後文件類型不同,但是在把對象保存到本地後想對對象在進行操作就有很大差別了 ...
  • 本示例學習如何實現基於Task的非同步操作進行取消流程,以及在任務真正運行前如何知道任務已經被取消。 我們學習如何在task中拋出不同情況的異常,以及如何獲取這些異常信息。 ...
  • 代碼一定要靜下心來自己琢磨感悟,才會發現一些細節,只註重實現的結果是要不得的。 室友有些奮進,我得努力啊! ...
  • Dapper,tinyint(1), Error parsing column ...
  • 1.1、Web Service基本概念 Web Service也叫XML Web Service WebService是一種可以接收從Internet或者Intranet上的其它系統中傳遞過來的請求,輕量級的獨立的通訊技術。是:通過SOAP在Web上提供的軟體服務,使用WSDL文件進行說明,並通過U ...
  • Web service是一個基於可編程的web的應用程式,用於開發分散式的互操作的應用程式,也是一種web服務 WebService的特性有以下幾點: 1.使用XML(標準通用標記語言)來作為數據交互的格式。 2.跨平臺性,因為使用XML所以只要本地應用可以連接網路解析XML就可以實現數據交換,比如 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...