首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在OpenXML BarChart上添加自定义文本

OpenXML是一种开放的XML文件格式,用于创建和编辑电子文档,包括Word、Excel和PowerPoint等。BarChart是OpenXML中的一种图表类型,用于展示柱状图数据。

要在OpenXML BarChart上添加自定义文本,可以按照以下步骤进行操作:

  1. 创建一个BarChart对象,指定图表类型为柱状图。
  2. 设置图表的数据源,可以通过添加数据系列和数据点来指定图表的数据。
  3. 添加图表的标题和副标题,可以通过ChartTitle和ChartSubtitle来设置。
  4. 添加图表的X轴和Y轴标签,可以使用CategoryAxis和ValueAxis来指定。
  5. 设置柱状图的样式,包括颜色、渐变效果等。
  6. 添加自定义文本,可以使用DataLabel对象来实现。可以指定文本的位置、格式和内容。
  7. 保存并关闭BarChart对象。

以下是一些示例代码,演示如何在OpenXML BarChart上添加自定义文本:

代码语言:txt
复制
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Drawing;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using DocumentFormat.OpenXml.Drawing.Charts;

public class OpenXmlHelper
{
    public static void AddCustomTextToBarChart(string fileName)
    {
        using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileName, true))
        {
            WorkbookPart workbookPart = document.WorkbookPart;
            WorksheetPart worksheetPart = workbookPart.WorksheetParts.FirstOrDefault();
            SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();

            // 创建一个新的图表
            ChartPart chartPart = worksheetPart.AddNewPart<ChartPart>();
            ChartSpace chartSpace = new ChartSpace();
            chartPart.ChartSpace = chartSpace;

            // 创建柱状图对象
            BarChart barChart = chartSpace.AppendChild(new BarChart());

            // 设置柱状图的类型和样式
            barChart.Append(new BarDirection() { Val = new EnumValue<BarDirectionValues>(BarDirectionValues.Column) });
            barChart.Append(new GapWidth() { Val = new UInt16Value(150) });

            // 创建数据系列和数据点
            barChart.AppendChild(CreateSeries());
            barChart.AppendChild(CreateCategoryAxis());
            barChart.AppendChild(CreateValueAxis());

            // 添加自定义文本
            barChart.AppendChild(CreateDataLabel());

            // 将图表添加到工作表
            Drawing drawing = worksheetPart.DrawingsPart?.Drawing ?? worksheetPart.AddNewPart<DrawingsPart>().Drawing;
            ChartReference chartReference = drawing.AppendChild(new ChartReference() { Id = worksheetPart.GetIdOfPart(chartPart) });

            // 设置图表位置
            TwoCellAnchor anchor = drawing.AppendChild(new TwoCellAnchor());
            anchor.Append(new FromMarker() { RowId = new RowIdValue(0), ColumnId = new ColumnIdValue(0) });
            anchor.Append(new ToMarker() { RowId = new RowIdValue(10), ColumnId = new ColumnIdValue(10) });
            anchor.Append(chartReference);
            anchor.Append(new ClientData());

            worksheetPart.Worksheet.Save();
        }
    }

    private static CategoryAxis CreateCategoryAxis()
    {
        CategoryAxis categoryAxis = new CategoryAxis(new AxisId() { Val = new UInt32Value(48650112u) });
        categoryAxis.Append(new Scaling(new Orientation() { Val = new EnumValue<DocumentFormat.OpenXml.Drawing.Charts.OrientationValues>(DocumentFormat.OpenXml.Drawing.Charts.OrientationValues.MinMax) }),
            new AxisPosition() { Val = new EnumValue<AxisPositionValues>(AxisPositionValues.Bottom) },
            new NumberingFormat() { FormatCode = "General", SourceLinked = true },
            new TickLabelPosition() { Val = new EnumValue<TickLabelPositionValues>(TickLabelPositionValues.NextTo) },
            new CrossingAxis() { Val = new UInt32Value(48650112U) },
            new AutoLabeled() { Val = new BooleanValue(true) },
            new LabelAlignment() { Val = new EnumValue<LabelAlignmentValues>(LabelAlignmentValues.Center) },
            new LabelOffset() { Val = new UInt16Value(100) },
            new NoMultiLevelLabels() { Val = new BooleanValue(false) }
        );

        return categoryAxis;
    }

    private static ValueAxis CreateValueAxis()
    {
        ValueAxis valueAxis = new ValueAxis(new AxisId() { Val = new UInt32Value(48650112u) });
        valueAxis.Append(new Scaling(new Orientation() { Val = new EnumValue<DocumentFormat.OpenXml.Drawing.Charts.OrientationValues>(DocumentFormat.OpenXml.Drawing.Charts.OrientationValues.MinMax) }),
            new AxisPosition() { Val = new EnumValue<AxisPositionValues>(AxisPositionValues.Left) },
            new MajorGridlines(),
            new NumberingFormat() { FormatCode = "General", SourceLinked = true },
            new TickLabelPosition() { Val = new EnumValue<TickLabelPositionValues>(TickLabelPositionValues.NextTo) },
            new CrossingAxis() { Val = new UInt32Value(48650112U) },
            new Crosses() { Val = new EnumValue<CrossesValues>(CrossesValues.AutoZero) },
            new CrossBetween() { Val = new EnumValue<CrossBetweenValues>(CrossBetweenValues.Between) }
        );

        return valueAxis;
    }

    private static BarChartSeries CreateSeries()
    {
        BarChartSeries barChartSeries = new BarChartSeries(new Index() { Val = new UInt32Value(0u) })
        {
            SeriesText = new SeriesText(new NumericValue() { Text = "Sample" })
        };

        BarChartSeriesExtensionList extensionList = new BarChartSeriesExtensionList();
        BarChartSeriesExtension extension = new BarChartSeriesExtension() { Uri = "{CE6537A1-D6FC-4f65-9D91-7224C49458BB}" };

        // 设置柱状图的样式
        extension.AppendChild(new DocumentFormat.OpenXml.Office2010.Drawing.Charts.FirstSliceAngle() { Val = 0 });
        extensionList.Append(extension);

        barChartSeries.AppendChild(extensionList);

        return barChartSeries;
    }

    private static DataLabel CreateDataLabel()
    {
        DataLabel dataLabel = new DataLabel();
        dataLabel.Append(new ShowLegendKey() { Val = new BooleanValue(true) });
        dataLabel.Append(new ShowValue() { Val = new BooleanValue(true) });
        dataLabel.Append(new ShowCategoryName() { Val = new BooleanValue(true) });
        dataLabel.Append(new ShowSeriesName() { Val = new BooleanValue(true) });
        dataLabel.Append(new ShowPercent() { Val = new BooleanValue(true) });
        dataLabel.Append(new ShowBubbleSize() { Val = new BooleanValue(false) });
        dataLabel.Append(new ShowLeaderLines() { Val = new BooleanValue(true) });

        // 设置自定义文本
        TextProperties textProperties = new TextProperties();
        textProperties.Append(new BodyProperties());
        textProperties.Append(new ListStyle());
        dataLabel.Append(textProperties);

        return dataLabel;
    }
}

上述代码使用OpenXML库来操作OpenXML文件,通过创建BarChart对象,并调用相关方法设置图表的样式、数据和自定义文本等。在最后将图表插入到工作表中并保存文件。

请注意,示例代码仅用于演示目的,实际应用中可能需要根据具体需求进行修改和扩展。关于OpenXML和BarChart的更多详细信息,可以参考腾讯云的OpenXML开发指南

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何在图片添加文本信息

前言 给图片添加文本信息是非常常见的需求,通常需要添加文本信息分为中文文字或者是非中文的文字,比如数字和英文,对这两类的实现方法也有所不同,非中文的文本信息可以直接用 opencv 实现,而中文文本需要使用...opencv 添加文本信息 opencv 添加文本信息的函数是 putText ,实现代码如下所示,这个函数的参数主要是: img:原图 text:需要添加的文字 position:文字起始的位置,tuple...元组类型 font: 字体类型,这里用了默认字体,实际还有其他几种字体,具体可以查看官方文档:https://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html...---- PIL 添加中文文本信息 如果是中文文字,那么就必须用 PIL 来实现了,同样先上实现的代码: from PIL import Image, ImageDraw, ImageFont %matplotlib...基本的参数其实和 opencv 的函数一样,同样需要指定文字、字体、起始位置、字体大小和颜色,其中字体可以是自定义的字体,官方文档中给出了不同系统自带字体存放的位置: windows: c:\Windows

1.9K20

Ubuntu 20.04添加swap交换空间

如果您的系统不断出现内存不足的情况,则应添加更多内存RAM。交换空间旨在改善系统的性能,并不会增加系统的总内存。...如果要添加更多交换空间,请将2G替换为你所需交换空间的大小。 创建一个指定大小文件的方式Ubuntu 20.04中有两种,分别fallocate和dd命令。...如果您的系统没有fallocate命令,或者您收到一条错误消息,提示fallocate failed: Operation not supported操作不支持。...Linux内核启动是将会次配置文件的参数。...你将使用rm命令删除文件:sudo rm /swapfile 结论 我们向您展示了如何在Ubuntu 20.04系统创建交换文件以及激活和配置交换空间。如果您遇到问题或有反馈,请在下面发表评论。

3.4K31

dotnet OpenXML PPTX 表格单元格加上 VerticalMerge 或 HorizontalMerge 将导致 WPS 丢失文本

本文记录 WPS 的一个已知问题,如果在表格的单元格里面配置了 VerticalMerge 或 HorizontalMerge 为 false 值时,则在此单元格内的文本将被丢失。... 此文档将会让 WPS 打开之后,可以正常显示表格元素,但是丢失表格的对应单元格内的文本。...如果表格单元格没有合并,是没有设置 VerticalMerge 和 HorizontalMerge 属性,这就意味着如果遇到 VerticalMerge 和 HorizontalMerge 属性被设置,那必定只有设置为...(transform1); graphicFrame1.Append(graphic1); return graphicFrame1; } 本文代码放在 github 和 gitee ,...可以使用如下命令行拉取代码 先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,命令行里面输入以下代码,即可获取到本文的代码 git init git remote add origin https

7110

sed命令文本每行,行尾或行首添加字符

用sed命令在行首或行尾添加字符的命令有以下几种: 假设处理的文本为test.file 每行的头添加字符,比如"HEAD",命令如下: sed "s/^/HEAD&/g" test.file 每行的行尾添加字符...sed "s/$/&TAIL/g" test.file 运行结果如下图: 几点说明: "^"代表行首,"$"代表行尾 's/$/&TAIL/g'中的字符g代表每行出现的字符全部替换,如果想在特定字符处添加...,g就有用了,否则只会替换每行第一个,而不继续往后找了 例: 如果想导出文件,命令末尾加"> outfile_name";如果想在原文件更改,添加选项"-i",如(这里的-i,可以理解为其他命令执行后的结果重定向到原文件...,所以-n p等参数会影响-i的效果 也可以把两条命令和在一起,test.file的每一行的行头和行尾分别添加字符"HEAD"、“TAIL”,命令: sed "/.

3.4K20

iOS应用中添加自定义字体 原

iOS应用中添加自定义字体 一、应用中添加自定义字体的步骤 1、网上提供的字体库有很多,下载完成后,将其导入工程中,一般为ttf格式。...3、项目的info.plist文件中添加字体键值如下: ? 这个数组中可以添加多个元素,多个字体库。...4、这时实际我们已经将字体添加进了工程中,但是在在使用这个字体时,字体的名字有时和文件名是不一样的,我们需要知道真实的字体名称,通常情况下,我们会讲所有字体名称打印出来:     for (NSString...        }     } 5、找到我们需要的字体,如下使用即可:  UIFont * font = [UIFont fontWithName:@"yuweij" size:14]; 二、如何快速的找到新添加的字体名字...为了以后使用自定义字体的时候不必一次一次的经历这样的痛苦,Xcode6.3的环境下,我将所有的系统字体获取后写入了plist文件,将这个plist文件导入项目中,通过如下方法,可以只打印出新增加的字体

1.8K20

Spark用LDA计算文本主题模型

新闻推荐中,由于新闻主要为文本的特性,基于内容的推荐(Content-based Recommendation)一直是主要的推荐策略。...基于内容的策略主要思路是从文本提取出特征,然后利用特征向量化后的向量距离来计算文本间的相关度。...马化腾/张小龙/Pony 这两篇文章话题上是高度相关的,但在关键词这个维度上,他们的相似度为0. 1. 柯洁/李世乭/围棋 2....AlphaGo/人机大战/人工智能 同理,这两篇文章甚至分类都不同(前者体育类别,后者科技),要关联起来就更困难了。...图1 基于主题模型的推荐策略 如上图,LDA预测出的结果是文档N个topic的权重分布,我们利用该分布计算文档间的余弦相似度/欧氏距离/皮尔逊相似度等,得出topN的相似文档,可作为相关推荐的结果。

2.2K20

自定义数据集实现OpenAI CLIP

2021年1月,OpenAI宣布了两个新模型:DALL-E和CLIP,它们都是以某种方式连接文本和图像的多模态模型。...也就是说它是完整的句子训练的,而不是像“汽车”、“狗”等离散的分类,这一点对于应用至关重要。当训练完整的短语时,模型可以学习更多的东西,并识别照片和文本之间的模式。...CLIP发布的时候能在无任何微调的情况下(zero-shot ), ImageNet 数据集的分类表现超 ResNets-50 微调后的效果,也就是说他是非常有用的。...然后把它变成一个张量,并以“image”作为键存储字典中。最后我们将标题的原始文本与关键字“标题”一起输入字典。...也就是说CLIP这种方法小数据集上自定义也是可行的。

1K30

dotnet OpenXML SDK 形状的 rect Shape Text Rectangle 属性对文本框的坐标影响

Office 里面,对于形状,可以通过 a:rect 指定文本框的坐标 PPT 里面,有文档里面存在自定义形状大概如下 <!...如下图,形状里面的文本会先通过形状的 a:rect 拿到文本框相对于形状的矩形范围,然后文本又相对于文本框有一定的边距 ?... OpenXML 里面,根据 ECMA 376 的 20.1.9.22 文档内容,形状的 a:rect 决定文本框的外框的矩形范围。...决定文本文本框里面的边距 因此文本形状里面会受到 a:rect 和 a:bodyPr 的影响 OpenXML SDK 辅助读取形状的 a:rect 可以使用如下代码 using...(var presentationDocument = DocumentFormat.OpenXml.Packaging.PresentationDocument.Open("自定义形状.pptx",

57620

文本分类(下)-卷积神经网络(CNN)文本分类的应用

1 简介 原先写过两篇文章,分别介绍了传统机器学习方法文本分类的应用以及CNN原理,然后本篇文章结合两篇论文展开,主要讲述下CNN文本分类的应用。...前面两部分内容主要是来自两位博主的文章(文章中已经给出原文链接),是对两篇论文的解读以及总结,基本阐释了CNN文本分类模型;后半部分讲一个实例和项目实战 2 论文1《Convolutional Neural...模型结构 文本分析任务中,由于句子句长长度有限、结构紧凑、能够独立表达意思,使得CNN处理这一类问题上成为可能,主要思想是将ngram模型与卷积操作结合起来 2.1 输入层 如图所示,输入层是句子中的词语对应的...为了获得feature map,我们添加一个bias项和一个激活函数,比如Relu 4.4 #1max 因为不同大小的filter获取到的feature map大小也不一样,为了解决这个问题,然后添加一层...(经典方法和CNN) - 简书 文本分类()- 基于传统机器学习方法进行文本分类 - 简书 CNN中文文本分类的应用 - 代码王子 - 博客园 卷积神经网络(CNN)句子建模的应用 | Jey

1.5K20

Visual Studio Code 中添加自定义的代码片段

无论是那个编辑器,如果能够添加一些自定义代码片段,能够大大提升代码的输入效率。 本文介绍如何在 Visual Studio Code 中添加自定义代码片段。...Visual Studio Code 的代码片段设置 你可以 Visual Studio Code 的菜单中找到代码片段的设置入口, File -> Preferences -> User Snippets...关于代码片段编写的更多细节 关于文件名称 阅读前面的博客内容时,你可能注意到了:添加全局代码片段的时候,文件扩展名为 .code-snippets,例如 blog.code-snippets;添加语言特定的代码片段的时候... Visual Studio Code 中,你有这些变量可以使用: -TM_SELECTED_TEXT - 插入代码片段的时刻选中的文本 -TM_CURRENT_LINE - 插入代码片段的时刻光标所在的行...这个时间我之前也输入法中调过:常用输入法快速输入自定义格式的时间和日期(搜狗/QQ/微软拼音)。

91230

文本分类(下) | 卷积神经网络(CNN)文本分类的应用

1、简介 原先写过两篇文章,分别介绍了传统机器学习方法文本分类的应用以及CNN原理,然后本篇文章结合两篇论文展开,主要讲述下CNN文本分类的应用。...前面两部分内容主要是来自两位博主的文章(文章中已经给出原文链接),是对两篇论文的解读以及总结,基本阐释了CNN文本分类模型;后半部分讲一个实例和项目实战。...模型结构 文本分析任务中,由于句子句长长度有限、结构紧凑、能够独立表达意思,使得CNN处理这一类问题上成为可能,主要思想是将ngram模型与卷积操作结合起来。...为了获得feature map,我们添加一个bias项和一个激活函数,比如Relu。...(经典方法和CNN) - 简书 文本分类()- 基于传统机器学习方法进行文本分类 - 简书 CNN中文文本分类的应用 - 代码王子 - 博客园 卷积神经网络(CNN)句子建模的应用 | Jey

1.2K31
领券