最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用Spire.XLS在Excel中創(chuàng)建數(shù)據(jù)透視表

 更新時(shí)間:2025年09月03日 08:26:59   作者:缺點(diǎn)內(nèi)向  
在C#環(huán)境下進(jìn)行Excel自動(dòng)化,有多種方案可供選擇,例如Microsoft Office Interop、EPPlus等,但對(duì)于需要處理復(fù)雜Excel功能,尤其是數(shù)據(jù)透視表、圖表等高級(jí)特性,Spire.XLS憑借其獨(dú)特的優(yōu)勢(shì)脫穎而出,所以本文給大家介紹了如何使用Spire.XLS在Excel中創(chuàng)建數(shù)據(jù)透視表

引言

在 C# 環(huán)境下進(jìn)行 Excel 自動(dòng)化,有多種方案可供選擇,例如 Microsoft Office Interop、EPPlus 等。但對(duì)于需要處理復(fù)雜 Excel 功能,尤其是數(shù)據(jù)透視表、圖表等高級(jí)特性,并且注重性能和部署便利性的場(chǎng)景,Spire.XLS 憑借其獨(dú)特的優(yōu)勢(shì)脫穎而出。

為什么選擇 Spire.XLS 進(jìn)行 Excel 自動(dòng)化?

Spire.XLS 的核心特點(diǎn)與優(yōu)勢(shì):

  • 無(wú)需安裝 Office: Spire.XLS 是一個(gè)獨(dú)立的 .NET 組件,不依賴于 Microsoft Office 的安裝,這極大地簡(jiǎn)化了部署流程,避免了兼容性問(wèn)題。
  • 高性能: 針對(duì)大數(shù)據(jù)量和復(fù)雜操作進(jìn)行了優(yōu)化,處理大型 Excel 文件時(shí)表現(xiàn)出色。
  • API 豐富且直觀: 提供了全面且易于理解的 API 接口,能夠覆蓋 Excel 的幾乎所有功能,包括單元格操作、樣式設(shè)置、圖表、數(shù)據(jù)驗(yàn)證、以及本文重點(diǎn)探討的數(shù)據(jù)透視表等。
  • 跨平臺(tái)支持: 支持 .NET Framework、.NET Core、.NET 5/6/7 等,可在 Windows、Linux、macOS 等多種環(huán)境中使用。
  • 出色的數(shù)據(jù)透視表支持: Spire.XLS 提供了強(qiáng)大的 API 來(lái)創(chuàng)建、配置和操作數(shù)據(jù)透視表,包括設(shè)置行/列字段、值字段、篩選器、計(jì)算字段、樣式等,功能非常完善。

Spire.XLS 創(chuàng)建數(shù)據(jù)透視表核心步驟詳解

1. 安裝 Spire.XLS 庫(kù)

首先,您需要在您的 C# 項(xiàng)目中安裝 Spire.XLS。最簡(jiǎn)單的方式是通過(guò) NuGet 包管理器:

  1. 打開(kāi) Visual Studio。
  2. 在“解決方案資源管理器”中,右鍵點(diǎn)擊您的項(xiàng)目,選擇“管理 NuGet 程序包”。
  3. 在“瀏覽”選項(xiàng)卡中搜索 Spire.XLS。
  4. 點(diǎn)擊“安裝”。

2. 準(zhǔn)備數(shù)據(jù)源

數(shù)據(jù)透視表需要一個(gè)結(jié)構(gòu)化的數(shù)據(jù)源。通常,這意味著您的數(shù)據(jù)應(yīng)該在一個(gè)連續(xù)的單元格區(qū)域中,并且第一行作為表頭(字段名稱)。

例如,我們準(zhǔn)備如下銷售數(shù)據(jù):

銷售員產(chǎn)品區(qū)域銷售額訂單日期
張三筆記本華東50002023/1/1
李四手機(jī)華南30002023/1/2
王五筆記本華北60002023/1/3
張三手機(jī)華東45002023/1/4
李四平板華南20002023/1/5
王五筆記本華中70002023/1/6

3. 代碼示例 1: 初始化工作簿與添加數(shù)據(jù)

以下代碼演示如何創(chuàng)建一個(gè)新的 Excel 工作簿,并填充上述銷售數(shù)據(jù)作為數(shù)據(jù)透視表的源數(shù)據(jù)。

using Spire.Xls;
using Spire.Xls.PivotTable;
using System;

namespace SpireXlsPivotTableDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 創(chuàng)建一個(gè)新的工作簿
            Workbook workbook = new Workbook();
            // 獲取第一個(gè)工作表
            Worksheet sheet = workbook.Worksheets[0];
            sheet.Name = "原始數(shù)據(jù)";

            // 寫(xiě)入表頭
            sheet.Range["A1"].Value = "銷售員";
            sheet.Range["B1"].Value = "產(chǎn)品";
            sheet.Range["C1"].Value = "區(qū)域";
            sheet.Range["D1"].Value = "銷售額";
            sheet.Range["E1"].Value = "訂單日期";

            // 寫(xiě)入數(shù)據(jù)
            string[,] data = new string[,]
            {
                {"張三", "筆記本", "華東", "5000", "2023/1/1"},
                {"李四", "手機(jī)", "華南", "3000", "2023/1/2"},
                {"王五", "筆記本", "華北", "6000", "2023/1/3"},
                {"張三", "手機(jī)", "華東", "4500", "2023/1/4"},
                {"李四", "平板", "華南", "2000", "2023/1/5"},
                {"王五", "筆記本", "華中", "7000", "2023/1/6"},
                {"張三", "平板", "華北", "3500", "2023/1/7"},
                {"李四", "筆記本", "華東", "5500", "2023/1/8"},
                {"王五", "手機(jī)", "華南", "4000", "2023/1/9"},
            };

            for (int i = 0; i < data.GetLength(0); i++)
            {
                for (int j = 0; j < data.GetLength(1); j++)
                {
                    sheet.Range[i + 2, j + 1].Value = data[i, j];
                }
            }

            // 調(diào)整列寬以適應(yīng)內(nèi)容
            sheet.AutoFitColumn(1);
            sheet.AutoFitColumn(2);
            sheet.AutoFitColumn(3);
            sheet.AutoFitColumn(4);
            sheet.AutoFitColumn(5);

            Console.WriteLine("原始數(shù)據(jù)已準(zhǔn)備完成。");

            // 后續(xù)將在這里添加創(chuàng)建數(shù)據(jù)透視表的代碼
            // ...
        }
    }
}

4. 代碼示例 2: 創(chuàng)建和配置數(shù)據(jù)透視表

接下來(lái),我們將在同一個(gè)工作簿中創(chuàng)建一個(gè)新的工作表,并在其中創(chuàng)建并配置數(shù)據(jù)透視表。我們將以“銷售員”作為行字段,“產(chǎn)品”作為列字段,并匯總“銷售額”。

              // ... (接上一個(gè)代碼示例)

            // 定義數(shù)據(jù)源范圍
            CellRange dataRange = sheet.Range["A1:E10"]; // 包含表頭和所有數(shù)據(jù)

            // 添加一個(gè)新的工作表用于放置數(shù)據(jù)透視表
            Worksheet pivotSheet = workbook.Worksheets.Add("銷售數(shù)據(jù)透視表");
            
            // 創(chuàng)建一個(gè)數(shù)據(jù)透視緩存
            // PivotCache cache = workbook.PivotCaches.Add(dataRange); // 也可以直接使用數(shù)據(jù)范圍創(chuàng)建
            
            // 添加數(shù)據(jù)透視表到新的工作表,指定其顯示位置為 A1
            // 第一個(gè)參數(shù)是透視表的名稱,第二個(gè)參數(shù)是透視表在目標(biāo)工作表中的起始位置
            // 第三個(gè)參數(shù)是數(shù)據(jù)源范圍
            PivotTable pt = pivotSheet.PivotTables.Add("銷售分析透視表", pivotSheet.Range["A1"], dataRange);
            
            // 設(shè)置行字段
            // 將“銷售員”字段添加到行區(qū)域
            PivotField rowField = pt.PivotFields["銷售員"];
            rowField.Axis = AxisTypes.Row;
            // 啟用重復(fù)項(xiàng)目標(biāo)簽,使得每個(gè)銷售員的名稱都顯示
            rowField.RepeatItemLabels = true; 
            // 啟用自動(dòng)顯示,如果數(shù)據(jù)量大,可以自動(dòng)顯示前N個(gè)或后N個(gè)
            rowField.IsAutoShow = true;

            // 設(shè)置列字段
            // 將“產(chǎn)品”字段添加到列區(qū)域
            PivotField columnField = pt.PivotFields["產(chǎn)品"];
            columnField.Axis = AxisTypes.Column;

            // 設(shè)置值字段 (數(shù)據(jù)區(qū)域)
            // 將“銷售額”字段添加到數(shù)據(jù)區(qū)域,默認(rèn)聚合方式為求和
            PivotField dataField = pt.PivotFields["銷售額"];
            // 設(shè)置數(shù)據(jù)字段的聚合函數(shù)為求和
            dataField.Subtotals = SubtotalTypes.Sum; 
            dataField.NumberFormat = "#,##0.00"; // 設(shè)置銷售額的數(shù)字格式

            // 設(shè)置篩選器 (可選)
            // 如果需要按區(qū)域篩選,可以添加篩選器字段
            // PivotField filterField = pt.PivotFields["區(qū)域"];
            // filterField.Axis = AxisTypes.Page; // Page表示篩選器區(qū)域

            // 刷新數(shù)據(jù)透視表
            pt.CalculateData();

            // 自動(dòng)調(diào)整透視表所在列的寬度,使其內(nèi)容完全顯示
            pivotSheet.AutoFitColumns();

            Console.WriteLine("數(shù)據(jù)透視表已創(chuàng)建并配置完成。");

            // ... (保存文件代碼)

對(duì)字段設(shè)置的詳細(xì)解釋:

  • AxisTypes.Row: 將字段放置在數(shù)據(jù)透視表的行區(qū)域,用于展開(kāi)行方向的數(shù)據(jù)。
  • AxisTypes.Column: 將字段放置在數(shù)據(jù)透視表的列區(qū)域,用于展開(kāi)列方向的數(shù)據(jù)。
  • AxisTypes.Page: 將字段放置在數(shù)據(jù)透視表的篩選器區(qū)域(舊稱“頁(yè)字段”),允許用戶通過(guò)下拉列表篩選數(shù)據(jù)。
  • SubtotalTypes.Sum: 設(shè)置值字段的聚合方式為求和。Spire.XLS 支持多種聚合函數(shù),如 Count (計(jì)數(shù)), Average (平均值), Max (最大值), Min (最小值), Product (乘積), CountNums (數(shù)字計(jì)數(shù)) 等。
  • NumberFormat: 用于設(shè)置值字段的數(shù)字顯示格式,例如貨幣、百分比、日期等。
  • RepeatItemLabels = true: 使得行/列字段的每個(gè)項(xiàng)目標(biāo)簽都重復(fù)顯示,而不是只顯示一次。這在某些報(bào)告場(chǎng)景下有助于清晰度。
  • IsAutoShow = true: 啟用自動(dòng)顯示功能,對(duì)于行/列字段,可以自動(dòng)顯示前 N 個(gè)或后 N 個(gè)項(xiàng)目,這在數(shù)據(jù)量大時(shí)很有用。

5. 代碼示例 3: 保存 Excel 文件

最后一步是將包含原始數(shù)據(jù)和數(shù)據(jù)透視表的 Excel 文件保存到指定路徑。

            // ... (接上一個(gè)代碼示例)

            // 保存工作簿到文件
            string outputPath = "DataPivotTableDemo.xlsx";
            workbook.SaveToFile(outputPath, ExcelVersion.Version2016); // 可以指定保存為不同版本的Excel文件

            Console.WriteLine($"Excel 文件已保存到: {System.IO.Path.GetFullPath(outputPath)}");
            Console.WriteLine("按任意鍵退出...");
            Console.ReadKey();
        }
    }
}

進(jìn)階應(yīng)用與常見(jiàn)問(wèn)題

進(jìn)階技巧

  • 刷新數(shù)據(jù)透視表: 當(dāng)源數(shù)據(jù)發(fā)生變化時(shí),需要刷新數(shù)據(jù)透視表以反映最新數(shù)據(jù)??梢酝ㄟ^(guò) pt.CalculateData() 方法實(shí)現(xiàn)。
  • 設(shè)置透視表樣式: Spire.XLS 提供了豐富的 API 來(lái)設(shè)置數(shù)據(jù)透視表的樣式,例如 pt.BuiltInStyle 可以應(yīng)用內(nèi)置樣式,或者自定義邊框、字體、背景色等。
  • 處理多個(gè)數(shù)據(jù)源: 雖然 Spire.XLS 主要支持單個(gè)連續(xù)區(qū)域作為數(shù)據(jù)源,但對(duì)于更復(fù)雜的多數(shù)據(jù)源場(chǎng)景,您可能需要先將數(shù)據(jù)合并到一個(gè)工作表,或者考慮使用更高級(jí)的數(shù)據(jù)模型功能(如果 Spire.XLS 支持)。
  • 創(chuàng)建數(shù)據(jù)透視圖: 可以基于數(shù)據(jù)透視表創(chuàng)建動(dòng)態(tài)的數(shù)據(jù)透視圖,從而更直觀地展示分析結(jié)果。Spire.XLS 也提供了相應(yīng)的 API:
// get the first pivot table in the worksheet
IPivotTable pivotTable = pivotSheet.PivotTables[0];
//create a clustered column chart based on the pivot table
Chart chart = pivotSheet.Charts.Add(ExcelChartType.ColumnClustered, pivotTable);
chart.TopRow = 12;
chart.LeftColumn = 1;
chart.RightColumn = 8;
chart.BottomRow = 30;
chart.ChartTitle = "產(chǎn)品銷售分析";
chart.PrimaryCategoryAxis.MultiLevelLable = true;
  • 禁用數(shù)據(jù)透視表功能區(qū): 在某些特定場(chǎng)景下,您可能希望限制用戶對(duì)數(shù)據(jù)透視表的修改,可以通過(guò)禁用其功能區(qū):
// Get the first pivot table from the sheet 
XlsPivotTable pt = pivotSheet.PivotTables[0] as XlsPivotTable;
//Disable ribbon for this pivot table
pt.EnableWizard = false;

注意事項(xiàng)

  • 數(shù)據(jù)源格式: 確保數(shù)據(jù)源的第一行是有效的字段名稱,且數(shù)據(jù)區(qū)域是連續(xù)的,沒(méi)有空行或空列。
  • 字段名稱匹配: 在設(shè)置 PivotFields 時(shí),請(qǐng)確保使用的字段名稱與數(shù)據(jù)源中的表頭完全匹配(區(qū)分大小寫(xiě))。
  • 性能優(yōu)化: 對(duì)于超大數(shù)據(jù)集,考慮分批處理或優(yōu)化數(shù)據(jù)加載方式。Spire.XLS 在性能方面表現(xiàn)優(yōu)秀,但合理的代碼結(jié)構(gòu)仍然重要。
  • 許可證: Spire.XLS 是商業(yè)組件,在試用版中可能會(huì)有水印或功能限制。在生產(chǎn)環(huán)境中使用需要購(gòu)買相應(yīng)的許可證。

以上就是C#使用Spire.XLS在Excel中創(chuàng)建數(shù)據(jù)透視表的詳細(xì)內(nèi)容,更多關(guān)于C# Excel創(chuàng)建數(shù)據(jù)透視表的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Winform在DataGridView中顯示圖片

    Winform在DataGridView中顯示圖片

    本文主要介紹在DataGridView如何顯示圖片,簡(jiǎn)單實(shí)用,需要的朋友可以參考下。
    2016-05-05
  • 基于C#實(shí)現(xiàn)WinForm開(kāi)發(fā)操作系統(tǒng)的文件管理系統(tǒng)代碼

    基于C#實(shí)現(xiàn)WinForm開(kāi)發(fā)操作系統(tǒng)的文件管理系統(tǒng)代碼

    基于C#的WinForm應(yīng)用程序來(lái)模擬操作系統(tǒng)文件管理系統(tǒng),可以幫助用戶在Windows環(huán)境下進(jìn)行文件的創(chuàng)建、移動(dòng)、刪除與搜索等操作,這種模擬工具有助于學(xué)習(xí)文件系統(tǒng)的工作原理以及測(cè)試和開(kāi)發(fā)其他軟件項(xiàng)目
    2024-12-12
  • C#中int[][]與int[,]的使用與區(qū)別

    C#中int[][]與int[,]的使用與區(qū)別

    本文主要介紹了C#中int[][]與int[,]的使用與區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • c#基數(shù)排序Radix sort的實(shí)現(xiàn)方法

    c#基數(shù)排序Radix sort的實(shí)現(xiàn)方法

    這篇文章主要介紹了c#基數(shù)排序Radix sort的實(shí)現(xiàn)方法,有需要的朋友可以參考一下
    2014-01-01
  • C#中while循環(huán)語(yǔ)句用法實(shí)例詳解

    C#中while循環(huán)語(yǔ)句用法實(shí)例詳解

    這篇文章主要介紹了C#中while循環(huán)語(yǔ)句用法,以實(shí)例形式詳細(xì)分析了while語(yǔ)句的用法,并對(duì)return,continue,break的區(qū)別做了進(jìn)一步的分析,需要的朋友可以參考下
    2014-10-10
  • C# 前端無(wú)插件打印導(dǎo)出實(shí)現(xiàn)方式詳解

    C# 前端無(wú)插件打印導(dǎo)出實(shí)現(xiàn)方式詳解

    本文講述了使用C#實(shí)現(xiàn)前端無(wú)插件的打印和導(dǎo)出功能,介紹了相關(guān)技術(shù)和方法,適合需要在項(xiàng)目中實(shí)現(xiàn)相應(yīng)功能的開(kāi)發(fā)者參考
    2024-10-10
  • C# 3DES加密詳解

    C# 3DES加密詳解

    3Des對(duì)每個(gè)數(shù)據(jù)塊進(jìn)行了三次的DES加密算法,是DES的一個(gè)更安全的變形。比起最初的DES,3DES更為安全。下面我們來(lái)看下在C#中的3DES加密方式的使用
    2015-06-06
  • winform C#獲得Mac地址,IP地址,子網(wǎng)掩碼,默認(rèn)網(wǎng)關(guān)的實(shí)例

    winform C#獲得Mac地址,IP地址,子網(wǎng)掩碼,默認(rèn)網(wǎng)關(guān)的實(shí)例

    下面小編就為大家?guī)?lái)一篇winform C#獲得Mac地址,IP地址,子網(wǎng)掩碼,默認(rèn)網(wǎng)關(guān)的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • C#貪吃蛇游戲?qū)崿F(xiàn)分析

    C#貪吃蛇游戲?qū)崿F(xiàn)分析

    這篇文章主要為大家分析了C#貪吃蛇游戲的實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • WPF利用CommunityToolkit.Mvvm實(shí)現(xiàn)級(jí)聯(lián)選擇器

    WPF利用CommunityToolkit.Mvvm實(shí)現(xiàn)級(jí)聯(lián)選擇器

    這篇文章主要介紹了WPF如何利用CommunityToolkit.Mvvm實(shí)現(xiàn)級(jí)聯(lián)選擇器,文中的示例代碼講解詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定幫助,需要的小伙伴可以參考一下
    2023-12-12

最新評(píng)論

揭西县| 扎兰屯市| 金华市| 灵武市| 乐平市| 环江| 班玛县| 大埔县| 略阳县| 鸡西市| 信阳市| 华坪县| 辽中县| 邮箱| 繁昌县| 新兴县| 万山特区| 老河口市| 阳春市| 六盘水市| 当阳市| 天柱县| 莱芜市| 武宣县| 博乐市| 和田市| 梧州市| 金堂县| 连云港市| 界首市| 定州市| 沾益县| 大竹县| 林甸县| 五家渠市| 城口县| 濮阳县| 乳源| 汉中市| 霍山县| 浠水县|