NPOI 操作word创建柱形图- 单柱

创建单柱形图和创建多柱形图的代码一样,只是里面需要修改一些地方,让柱形图的显示更好看一些(貌似也不咋的好看)

结果图:

 XWPFDocument m_Docx = new XWPFDocument();
//测试数据格式
//string zxtstr="{report:[{title:'男',data:[{name:'20-30',num:2},{name:'30-40',num:4},{name:'40-50',num:6},{name:'50-60',num:7},{name:'60-70',num:9} ] }]}";

          JObject jsono = JObject.Parse(zxtstr);
          XSSFWorkbook workbook = new XSSFWorkbook();
          //将xlsx数据转为btye,因为在插入第一张图表后workbook流会关闭
          MemoryStream msxlsxData = new MemoryStream();
          workbook.Write(msxlsxData);
          msxlsxData.Flush();
          byte[] bxlsxData = msxlsxData.ToArray();

          //简单柱状图chartn.xml内容
          CT_ChartSpace ctbarchartspace0 = new CT_ChartSpace();

          ctbarchartspace0.date1904 = new CT_Boolean();
          ctbarchartspace0.date1904.val = 1;
          ctbarchartspace0.lang = new CT_TextLanguageID();
          ctbarchartspace0.lang.val = "zh-CN";

          CT_Chart m_chart = ctbarchartspace0.AddNewChart();

          //图表标题
          m_chart.title = new CT_Title();
          m_chart.title.tx = new CT_Tx();
          m_chart.title.tx.rich = new CT_TextBody();
          m_chart.title.tx.rich.AddNewBodyPr();
          m_chart.title.tx.rich.AddNewLstStyle();
          m_chart.title.tx.rich.p = new List<NPOI.OpenXmlFormats.Dml.CT_TextParagraph>();
          NPOI.OpenXmlFormats.Dml.CT_TextParagraph charttp = new NPOI.OpenXmlFormats.Dml.CT_TextParagraph();
          charttp.AddNewPPr().defRPr = new NPOI.OpenXmlFormats.Dml.CT_TextCharacterProperties();
          NPOI.OpenXmlFormats.Dml.CT_RegularTextRun r = charttp.AddNewR();
          r.rPr = new NPOI.OpenXmlFormats.Dml.CT_TextCharacterProperties();
          r.rPr.lang = "zh-CN";
          r.rPr.altLang = "en-US";
          r.t = "";//设置标题
          m_chart.title.tx.rich.p.Add(charttp);

          m_chart.title.overlay = new CT_Boolean();
          m_chart.title.overlay.val = 0;
          m_chart.autoTitleDeleted = new CT_Boolean();
          m_chart.autoTitleDeleted.val = 0;
          //--------1---------++
          //----------no same=============
          m_chart.plotArea = new CT_PlotArea();
          m_chart.plotArea.barChart = new List<CT_BarChart>();

          CT_BarChart m_barchart0 = new CT_BarChart();
          m_barchart0.barDir = new CT_BarDir();
          m_barchart0.barDir.val = ST_BarDir.col;
          m_barchart0.grouping = new CT_BarGrouping();
          m_barchart0.grouping.val = ST_BarGrouping.clustered;
          m_barchart0.ser = new List<CT_BarSer>();

          JArray ja = (JArray)jsono["report"];
          for (int i = 0; i < ja.Count; i++)
          {
              JObject json = (JObject)ja[i];
              string sexstr = json.GetValue("title").ToString();

              CT_BarSer m_barser = new CT_BarSer();
              m_barser.idx = new CT_UnsignedInt();
              m_barser.idx.val = (uint)i;
              m_barser.order = new CT_UnsignedInt();
              m_barser.order.val = (uint)i;
              m_barser.tx = new CT_SerTx();
              m_barser.tx.strRef = new CT_StrRef();
              m_barser.tx.strRef.f = "Sheet1!$B$1";
              m_barser.tx.strRef.strCache = new CT_StrData();
              m_barser.tx.strRef.strCache.ptCount = new CT_UnsignedInt();
              m_barser.tx.strRef.strCache.ptCount.val = 1;
              m_barser.tx.strRef.strCache.pt = new List<CT_StrVal>();

              CT_StrVal m_barpt1 = new CT_StrVal();
              m_barpt1.idx = 0;
              m_barpt1.v = sexstr;

              m_barser.tx.strRef.strCache.pt.Add(m_barpt1);
              //分类标题显示
              m_barser.invertIfNegative = new CT_Boolean();
              m_barser.invertIfNegative.val = 0;


              m_barser.cat = new CT_AxDataSource();
              m_barser.cat.strRef = new CT_StrRef();
              m_barser.cat.strRef.f = "Sheet1!$A$2:$A$5";
              m_barser.cat.strRef.strCache = new CT_StrData();
              m_barser.cat.strRef.strCache.ptCount = new CT_UnsignedInt();
              m_barser.cat.strRef.strCache.ptCount.val = 4;
              m_barser.cat.strRef.strCache.pt = new List<CT_StrVal>();



              m_barser.val = new CT_NumDataSource();
              m_barser.val.numRef = new CT_NumRef();
              m_barser.val.numRef.f = "Sheet1!$B$2:$B$5";
              m_barser.val.numRef.numCache = new CT_NumData();
              m_barser.val.numRef.numCache.formatCode = "General";
              m_barser.val.numRef.numCache.ptCount = new CT_UnsignedInt();
              m_barser.val.numRef.numCache.ptCount.val = 4;
              m_barser.val.numRef.numCache.pt = new List<CT_NumVal>();

              JArray jadata = (JArray)json.GetValue("data");
              for (int j = 0; j < jadata.Count; j++)
              {
                  JObject json1 = (JObject)jadata[j];
                  string name = json1.GetValue("name").ToString();
                  string num = json1.GetValue("num").ToString();

                  m_barpt1 = new CT_StrVal();
                  m_barpt1.idx = (uint)j;
                  m_barpt1.v = name;
                  m_barser.cat.strRef.strCache.pt.Add(m_barpt1);

                  CT_NumVal m_barvalpt1 = new CT_NumVal();
                  m_barvalpt1.idx = (uint)j;
                  m_barvalpt1.v = num;
                  m_barser.val.numRef.numCache.pt.Add(m_barvalpt1);
              }
              m_barchart0.ser.Add(m_barser);
          }
          //图表与数据显示设计
          m_barchart0.dLbls = new CT_DLbls();
          m_barchart0.dLbls.showLegendKey = new CT_Boolean();
          m_barchart0.dLbls.showLegendKey.val = 0;
          m_barchart0.dLbls.showVal = new CT_Boolean();//值显示设置
          m_barchart0.dLbls.showVal.val = 1;
          m_barchart0.dLbls.showCatName = new CT_Boolean();//分类显示设置
          m_barchart0.dLbls.showCatName.val = 0;
          m_barchart0.dLbls.showSerName = new CT_Boolean();//tx标题显示设置
          m_barchart0.dLbls.showSerName.val = 0;
          m_barchart0.dLbls.showPercent = new CT_Boolean();
          m_barchart0.dLbls.showPercent.val = 0;
          m_barchart0.dLbls.showBubbleSize = new CT_Boolean();
          m_barchart0.dLbls.showBubbleSize.val = 0;
          m_barchart0.dLbls.showLeaderLines = new CT_Boolean();
          m_barchart0.dLbls.showLeaderLines.val = 0;
          m_barchart0.gapWidth = new CT_GapAmount();
          m_barchart0.gapWidth.val = 150;
          m_barchart0.overlap = new CT_Overlap();
          m_barchart0.overlap.val = (sbyte)-25;

          //-----------第三个坐标轴---------------
          m_barchart0.axId = new List<CT_UnsignedInt>();
          CT_UnsignedInt m_axId = new CT_UnsignedInt();
          m_axId.val = 57733120;
          m_barchart0.axId.Add(m_axId);
          m_axId = new CT_UnsignedInt();
          m_axId.val = 57734656;
          m_barchart0.axId.Add(m_axId);

          m_chart.plotArea.barChart.Add(m_barchart0);

          m_chart.plotArea.catAx = new List<CT_CatAx>();
          CT_CatAx m_catAx = new CT_CatAx();
          m_catAx.axId = new CT_UnsignedInt();
          m_catAx.axId.val = 57733120;
          m_catAx.scaling = new CT_Scaling();
          m_catAx.scaling.orientation = new CT_Orientation();
          m_catAx.scaling.orientation.val = ST_Orientation.minMax;

          m_catAx.delete = new CT_Boolean();//分类标题
          m_catAx.delete.val = 0;

          m_catAx.axPos = new CT_AxPos();
         // m_catAx.axPos.val = ST_AxPos.b;
          m_catAx.axPos.val = ST_AxPos.l;//设置横坐标的值所在图表位置


          m_catAx.tickLblPos = new CT_TickLblPos();
          m_catAx.tickLblPos.val = ST_TickLblPos.nextTo;
          m_catAx.crossAx = new CT_UnsignedInt();
          m_catAx.crossAx.val = 57733120;
          m_catAx.crosses = new CT_Crosses();
          m_catAx.crosses.val = ST_Crosses.autoZero;

          m_chart.plotArea.catAx.Add(m_catAx);
          m_chart.plotArea.valAx = new List<CT_ValAx>();
          CT_ValAx m_valAx = new CT_ValAx();
          m_valAx.axId = new CT_UnsignedInt();
          m_valAx.axId.val = 57734656;
          m_valAx.scaling = new CT_Scaling();
          m_valAx.scaling.orientation = new CT_Orientation();
          m_valAx.scaling.orientation.val = ST_Orientation.minMax;
          m_valAx.axPos = new CT_AxPos();
         // m_valAx.axPos.val = ST_AxPos.l;
          m_valAx.axPos.val = ST_AxPos.t;//设置横坐标的值所在图表位置

          m_valAx.majorGridlines = new CT_ChartLines();


          m_valAx.numFmt = new NPOI.OpenXmlFormats.Dml.Chart.CT_NumFmt();
          m_valAx.numFmt.formatCode = "General";
          m_valAx.numFmt.sourceLinked = true;

          m_valAx.majorTickMark = new CT_TickMark();
          m_valAx.majorTickMark.val = ST_TickMark.none;
          m_valAx.minorTickMark = new CT_TickMark();
          m_valAx.minorTickMark.val = ST_TickMark.none;

          m_valAx.tickLblPos = new CT_TickLblPos();
          m_valAx.tickLblPos.val = ST_TickLblPos.nextTo;
          m_valAx.crossAx = new CT_UnsignedInt();
          m_valAx.crossAx.val = 57733120;
          m_valAx.crosses = new CT_Crosses();
          m_valAx.crosses.val = ST_Crosses.autoZero;

          m_valAx.crossBetween = new CT_CrossBetween();
          m_valAx.crossBetween.val = ST_CrossBetween.between;

          m_chart.plotArea.valAx.Add(m_valAx);

//注释下面的代码,不然会显示出横坐标作为小标题,要看效果可以打开注释
        //  m_chart.legend = new CT_Legend();
        //  m_chart.legend.legendPos = new CT_LegendPos();
          m_chart.legend.legendPos.val = ST_LegendPos.t;
        //  m_chart.legend.legendPos.val = ST_LegendPos.l;//图例的方向
        //  //==========+
        //  m_chart.legend.overlay = new CT_Boolean();
        //  m_chart.legend.overlay.val = 0;
         


          m_chart.plotVisOnly = new CT_Boolean();
          m_chart.plotVisOnly.val = 1;

          m_chart.dispBlanksAs = new CT_DispBlanksAs();
          m_chart.dispBlanksAs.val = ST_DispBlanksAs.gap;
          m_chart.showDLblsOverMax = new CT_Boolean();
          m_chart.showDLblsOverMax.val = 0;

          XWPFParagraph gp = m_Docx.CreateParagraph();
          XWPFRun gr = gp.CreateRun();
gr.AddChartSpace(new XSSFWorkbook(new MemoryStream(bxlsxData)), ctbarchartspace0, 5274310, 3076575);


//保存文件
string docPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "DocxWord");
if (!Directory.Exists(docPath)) { Directory.CreateDirectory(docPath); }
string fileName = string.Format("{0}.doc", DateTime.Now.ToString("yyyyMMddHHmmssfff"));
FileStream out1 = new FileStream(Path.Combine(docPath, fileName), FileMode.Create);
m_Docx.Write(out1);
out1.Close();

收集的使用NPOI操作word的文档,还是比较适用的文档 https://download.csdn.net/download/dengxt/10823924

NPOI版本: https://download.csdn.net/download/dengxt/10824550

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
NPOI是一款强大的.NET平台的开源库,可以用于操作Microsoft Office文件,包括Word文档。下面我将讲解如何使用NPOI操作Word书签。 首先,我们需要导入NPOI的库文件,并引入相应的命名空间。使用NPOI时,我们需要引用NPOI.POIFS、NPOI.HSSF.usermodel或NPOI.XSSF.usermodel、NPOI.HPSF等命名空间。 接下来,我们需要打开Word文档。可以使用NPOI.XWPF.UserModel.XWPFDocument类来加载文档,并创建一个XWPFDocument对象。 要操作Word书签,我们需要知道书签的名称。使用XWPFDocument对象的GetBookmarks()方法可以获取文档中所有的书签。返回的是一个IList对象,可以通过遍历该列表找到所需的书签对象。书签对象包含了书签的名称和位置信息等。 可以使用GetBookmarkStart()和GetBookmarkEnd()方法来获取书签的起始和结束位置。随后,可以使用XWPFDocument对象的RemoveBodyElement()方法来删除书签范围内的内容。 为了在书签范围内插入新内容,可以使用XWPFDocument对象的CreateParagraph()方法创建一个新段落,再将内容插入该段落内。然后,使用XWPFDocument对象的SetParagraph()方法将新段落插入到书签范围内。 最后,记得保存并关闭Word文档。使用XWPFDocument对象的Save()方法可以将修改后的文档保存到指定位置,使用Close()方法关闭文档对象。 通过以上步骤,我们可以使用NPOI操作Word书签。希望以上回答对您有帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值