C#创建Excel多级分组的方法

C#创建Excel多级分组的方法

概述

在使用C#操作Excel表格时,有时需要将数据按多个字段进行分组展示,这就需要使用Excel中的多级分组功能。本文将介绍如何使用C#创建Excel多级分组,并提供两个示例说明。

示例说明

示例1:使用C#创建Excel多级分组

下面是一个示例代码,演示如何使用C#创建Excel多级分组。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Excel;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建Excel对象
            Application excel = new Application();
            // 创建工作簿
            Workbook workbook = excel.Workbooks.Add();
            // 获取第一个工作表
            Worksheet worksheet = (Worksheet)workbook.Worksheets[1];

            // 写入表格数据
            worksheet.Cells[1, 1] = "部门";
            worksheet.Cells[1, 2] = "姓名";
            worksheet.Cells[1, 3] = "成绩";

            worksheet.Cells[2, 1] = "技术部";
            worksheet.Cells[2, 2] = "张三";
            worksheet.Cells[2, 3] = 80;

            worksheet.Cells[3, 1] = "技术部";
            worksheet.Cells[3, 2] = "李四";
            worksheet.Cells[3, 3] = 90;

            worksheet.Cells[4, 1] = "市场部";
            worksheet.Cells[4, 2] = "王五";
            worksheet.Cells[4, 3] = 85;

            worksheet.Cells[5, 1] = "市场部";
            worksheet.Cells[5, 2] = "赵六";
            worksheet.Cells[5, 3] = 95;

            // 设置分组字段
            Range range = worksheet.Range["A1:C5"];
            range.Select();

            // 分组
            worksheet.Rows.Group(start: Type.Missing, end: Type.Missing, byRow: Type.Missing, byColumn: Type.Missing, total: Type.Missing);

            // 设定多级分组
            worksheet.Outline.SummaryRow = XlSummaryRow.xlSummaryAbove;
            range.AutoFilter();
            range.Sort(Key1: range.Columns[3], Order1: XlSortOrder.xlDescending, Orientation: XlSortOrientation.xlSortColumns,
              Header: XlYesNoGuess.xlYes, MatchCase: false, SortMethod: XlSortMethod.xlStroke, DataOption1: XlSortDataOption.xlSortNormal);
            int i;
            for (i = 1; i <= 2; i++)
            {
                range.Subtotal(GroupBy: i, Function: XlConsolidationFunction.xlSum, TotalList: System.Array.CreateInstance(typeof(int), i + 1), Replace: true,
                  PageBreaks: false, SummaryBelowData: XlSummaryRow.xlSummaryBelow);
            }

            // 保存并关闭Excel对象
            workbook.SaveAs("Demo.xlsx");
            workbook.Close();
            excel.Quit();
        }
    }
}

上述代码首先创建Excel对象,然后创建工作簿和工作表,并写入表格数据。接着,我们使用Range对象选中整个表格,并调用Rows.Group方法进行分组。最后,使用Subtotal方法实现多级分组。

示例2:使用C#创建Excel多级分组(带合并单元格)

下面是一个示例代码,演示如何使用C#创建Excel多级分组,并在分组后的每个小组内部将第一列合并为一个单元格。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Excel;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建Excel对象
            Application excel = new Application();
            // 创建工作簿
            Workbook workbook = excel.Workbooks.Add();
            // 获取第一个工作表
            Worksheet worksheet = (Worksheet)workbook.Worksheets[1];

            // 写入表格数据
            worksheet.Cells[1, 1] = "部门";
            worksheet.Cells[1, 2] = "姓名";
            worksheet.Cells[1, 3] = "成绩";

            worksheet.Cells[2, 1] = "技术部";
            worksheet.Cells[2, 2] = "张三";
            worksheet.Cells[2, 3] = 80;

            worksheet.Cells[3, 1] = "技术部";
            worksheet.Cells[3, 2] = "李四";
            worksheet.Cells[3, 3] = 90;

            worksheet.Cells[4, 1] = "市场部";
            worksheet.Cells[4, 2] = "王五";
            worksheet.Cells[4, 3] = 85;

            worksheet.Cells[5, 1] = "市场部";
            worksheet.Cells[5, 2] = "赵六";
            worksheet.Cells[5, 3] = 95;

            // 设置分组字段
            Range range = worksheet.Range["A1:C5"];
            range.Select();

            // 分组
            worksheet.Rows.Group(start: Type.Missing, end: Type.Missing, byRow: Type.Missing, byColumn: Type.Missing, total: Type.Missing);

            // 设定多级分组
            worksheet.Outline.SummaryRow = XlSummaryRow.xlSummaryAbove;
            range.AutoFilter();
            range.Sort(Key1: range.Columns[3], Order1: XlSortOrder.xlDescending, Orientation: XlSortOrientation.xlSortColumns,
              Header: XlYesNoGuess.xlYes, MatchCase: false, SortMethod: XlSortMethod.xlStroke, DataOption1: XlSortDataOption.xlSortNormal);
            int i;
            for (i = 1; i <= 2; i++)
            {
                range.Subtotal(GroupBy: i, Function: XlConsolidationFunction.xlSum, TotalList: System.Array.CreateInstance(typeof(int), i + 1), Replace: true,
                  PageBreaks: false, SummaryBelowData: XlSummaryRow.xlSummaryBelow);

                // 合并单元格
                Range deptColumn = worksheet.Range[worksheet.Cells[range.Row, 1], worksheet.Cells[range.Row + range.Rows.Count - 1, 1]];
                deptColumn.Merge();
            }

            // 保存并关闭Excel对象
            workbook.SaveAs("Demo.xlsx");
            workbook.Close();
            excel.Quit();
        }
    }
}

上述代码结构与示例1相同,只是在分组后的每个小组内部增加了一个合并单元格的操作。我们使用Range对象选中每个小组的第一列,并调用Merge方法进行单元格合并。

总结

本文介绍了使用C#创建Excel多级分组的方法,并提供了两个示例代码,供大家参考。在实际开发中,可以根据实际需求对代码进行适当的修改和优化。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#创建Excel多级分组的方法 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • websocket与C# socket相互通信

    web端代码就是js代码,C#有两种方式:使用第三方库,如Fleck,使用C#原生socket编程实现   web端: <!doctype html> <html lang=”zh-CN”> <head> <meta charset=”UTF-8″> <title>下发网站上文件到学生机</t…

    C# 2023年4月27日
    00
  • .net4.5使用async和await异步编程实例

    .NET4.5使用async和await异步编程实例攻略 1. 什么是异步编程 在单线程程序中,当某个任务需要较长的时间才能完成时,程序会一直等待该任务完成后才能继续执行下面的代码,这会导致程序的执行效率变低,用户体验不佳。 异步编程通过将耗时操作放入另外的线程中处理,让主线程继续执行其他任务,从而提高程序的执行效率,改善用户体验。 2. async和awa…

    C# 2023年5月31日
    00
  • c#创建windows服务图解示例

    创建 Windows 服务是用于在后台执行长期运行任务的强大方式。C# 提供了一种简单的方法来创建 Windows 服务,而本篇攻略将为您提供创建 Windows 服务的完整步骤,并附带两个示例代码,供您参考。 创建 Windows 服务 步骤一:创建空白的 Windows 服务 首先打开 Visual Studio,从“文件”菜单中选择“新建”>“项…

    C# 2023年6月6日
    00
  • c#生成excel示例sql数据库导出excel

    要实现“c#生成excel示例sql数据库导出excel”的功能,需要分为以下几个步骤: 从数据库中获取需要导出的数据 将数据以Excel格式进行保存 下面是具体的步骤和示例代码: 步骤一:从数据库中获取数据 首先,需要引入System.Data.SqlClient命名空间,该命名空间提供了对SQL Server数据库的访问功能。 using System.…

    C# 2023年6月2日
    00
  • .NET Core利用 AsyncLocal 实现共享变量的代码详解

    关于”.NET Core利用 AsyncLocal 实现共享变量的代码详解”的攻略,我先介绍一些背景知识: AsyncLocal是一种用于跨异步操作保留数据的机制,它在.NET Core中被广泛使用。使用AsyncLocal可以在异步操作(例如Task.Run)中共享数据。 在使用AsyncLocal时,每个异步上下文都有一个数据容器,数据容器内包含了该上下…

    C# 2023年6月3日
    00
  • C#多线程系列之资源池限制

    C#多线程系列之资源池限制 背景介绍 在C#多线程编程中,经常需要对某些资源进行限制,例如同时只能有一定数量的线程使用某一资源,这时我们可以使用资源池技术来实现。 资源池的实现 资源池的实现原理比较简单,主要包括三个步骤: 初始化资源池,将所有可用资源放入资源池中; 线程从资源池中获取资源,使用资源; 使用完成后,线程将资源放回资源池。 基于上述原理,我们可…

    C# 2023年5月15日
    00
  • C#中list用法实例

    下面是关于C#中List用法的完整攻略。 什么是List 在C#语言中,List是指一个元素列表,也称为动态数组或无限长数组。它允许您动态添加或删除元素,以及在列表中访问特定元素。 如何创建List 我们可以使用List的构造函数来创建List对象。我们可以选择在构造函数中传递有关该List对象的信息,例如其初始容量: // 创建一个新的List对象 Lis…

    C# 2023年5月31日
    00
  • 如何在C#项目中链接一个文件夹下的所有文件详解

    当我们需要在C#项目中链接一个文件夹下的所有文件时,可以通过以下方式实现: 在 Visual Studio 中创建 C# 项目。选择 “File” > “New” > “Project”,然后选择 “Visual C#” > “Windows” > “Console Application”。 在项目中添加文件夹。右键项目,选择 “A…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部