C# OpenXML excel (SpreadsheetDocument )

----Lixg 867314078@qq.com

 

Ecma Office Open XML“Open XML”)是针对字处理文档、演示文稿电子表格的国际化开放标准。(话说中文资料好少)

 

想看到***.xlsx文档内部是怎么存储信息是很简单的,只需要将***.xlsx后缀名改为***.zip,然后用压缩软件解压缩就得到了一堆xml文件,而各公司就是利用openxml的标准解析,存储一个表格。所以想了解OpenXML需要先了解xml文件。

 

示例 li.xlsx解压结果(主目录,及xl子目录 worksheets子目录)

       

 ----------------------------------------------------------------------------------------------------------------------------------------------------

 

下边介绍microsoft提供的SpreadsheetDocument类,操作excel文档(文末代码):

 

SpreadsheetDocument:

表格文档类

WorkbookPart:

对应workbook.xml文档建立的一个类,处理该文档与外部的关系。

Workbook:

对应workbook.xml中的workbook元素。存储一excel文档的各sheet表的索引信息。

Sheets:

对应workbook的sheets子元素,包含所有sheet表的索引信息。

Sheet:

对应sheets的sheet子元素,包含一个sheet表的名称,及索引信息。可以由r:id 获取与该sheet对应的WorksheetPart对象。

 

Workbook.xml 示例

 

WorksheetPart:

对应sheet*.xml文档建立的一个类,处理该文档与外部的关系。

Worksheet:

对应sheet*.xml中的worksheet元素。存储一个sheet表的所有数据。

SheetData:

         对应Worksheet的sheeData子元素,包含sheet表的所有 row(行)及单元格数据。

Row:

         对应sheetData的Row子元素,sheet表中一行。

Cell:

         对应Row的c子元素,sheet表中的一个单元格,存储一个数据。

Sheet*.xml示例:


// 代码君来了//

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


using System.IO;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;


namespace COpenXML
{
    class clsExcel
    {
        /***** All Open Items ******/
        public Sheets           m_Sheets;           // Sheets : WorkBook 子项,各Sheet集合        
        public Workbook         m_WorkBook;         // WorkBook : WorkBook.xml的子项 存储*xlsx的相关信息
        public WorkbookPart     m_WorkBookPart;     // WorkBookpart : WorkBook容器


        public SharedStringTable m_ShareTable;


        public Worksheet        m_WorkSheet;        // WorkSheet : sheet*.xml 的容器, 1对1的关系
        public WorksheetPart    m_WorkSheetPart;    // WorkSheetPart : WorkSheet 的容器,从WorkBookPart获取


        public SpreadsheetDocument  m_Doc;


        //===Summary===
        //====================================
        // Name : Lixg
        // Date : 2013-11-

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用C# OpenXml创建Excel饼状图,需要进行以下步骤: 1. 创建Excel文件并添加工作表。 2. 创建饼状图并添加到工作表中。 3. 配置饼状图的数据系列。 4. 配置饼状图的数据标签和图例。 5. 保存Excel文件。 下面是一个简单的示例代码,它创建一个包含饼状图的Excel文件: ```csharp using System; using System.IO; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; using DocumentFormat.OpenXml.Drawing; using DocumentFormat.OpenXml.Drawing.Charts; using A = DocumentFormat.OpenXml.Drawing; using C = DocumentFormat.OpenXml.Drawing.Charts; namespace ExcelPieChartDemo { class Program { static void Main(string[] args) { // 创建Excel文件 var filePath = "PieChart.xlsx"; using (var spreadsheet = SpreadsheetDocument.Create(filePath, SpreadsheetDocumentType.Workbook)) { // 添加工作表 var workbookPart = spreadsheet.AddWorkbookPart(); workbookPart.Workbook = new Workbook(); var worksheetPart = workbookPart.AddNewPart<WorksheetPart>(); worksheetPart.Worksheet = new Worksheet(); var sheets = workbookPart.Workbook.AppendChild(new Sheets()); var sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Sheet1" }; sheets.Append(sheet); // 创建饼状图 var chartPart = worksheetPart.AddNewPart<ChartPart>(); var chart = new C.Chart(); chartPart.ChartSpace = new ChartSpace(); chartPart.ChartSpace.AppendChild(chart); var plotArea = chart.AppendChild(new PlotArea()); var pieChart = plotArea.AppendChild(new PieChart()); var series = pieChart.AppendChild(new C.Series(new C.StringReference() { Formula = new A.Formula("Sheet1!$A$1:$A$3") })); series.AppendChild(new C.CategoryAxisData(new C.StringReference() { Formula = new A.Formula("Sheet1!$B$1:$B$3") })); series.AppendChild(new C.Values(new C.NumberReference() { Formula = new A.Formula("Sheet1!$C$1:$C$3") })); // 配置饼状图的数据标签和图例 pieChart.AppendChild(new DataLabels(new C.ShowLegendKey() { Val = true })); pieChart.AppendChild(new C.Legend(new C.LegendPosition() { Val = C.LegendPositionValues.Right })); // 保存Excel文件 worksheetPart.Worksheet.Save(); chartPart.ChartSpace.Save(); spreadsheet.Close(); } } } } ``` 在上面的示例中,我们创建了一个包含三个数据点的饼状图,每个数据点都包含一个标签和一个值。我们还为饼状图配置了数据标签和图例。你可以根据自己的需求修改代码以创建不同的饼状图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值