C#中操作Word(8)—— 向Word中插入图表的三种方法(一)

一、 前言

        本文主要介绍向word中插入图表的方法。方法共有三种,每一种都有自己的适用范围和利弊。介绍之前,我们准备实验用的文档,做一个如下图所示的word模板,我们要做的的是在这个名叫chart的书签中插入一个图表,下面然后我将逐一进行介绍这三种方法:



方法一:插入OLEObject类型的图表

        这种方法适用于所有版本的excel,但是插入的图表界面较为粗糙,word2007之后图表的显示效果得到了很大的提升,所以这种类型的图表逐渐被放弃。该种方法只建议在word2003之前的版本中使用。

        首先我们需要先引入Microsoft.Office.Interop.Graph的引用,在添加引入的.Net标签页找到如下图圈出的引用,然后点击确定。



        为了防止命名控制冲突,我们可以使用using将Microsoft.Office.Interop.Word和Microsoft.Office.Interop.Graph重命名。
using Word=Microsoft.Office.Interop.Word;
using Graph=Microsoft.Office.Interop.Graph;

        完成了上面的工作后我们可以开始了,主要的思路是利用.InlineShapes的AddOLEObje()接口OLEObject类型的图表的图标插入,主要代码如下:
private void button1_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
Word.Document doc = app.Documents.Add("D:\\Test.docx");
app=doc.Application;
doc.ActiveWindow.Visible = true;
foreach (Word.Bookmark bk in doc.Bookmarks)
{
if (bk.Name == "chart")
{
object oClassType = "MSGraph.Chart.8";
Graph.Axis axis;//x坐标
Word.Range range = bk.Range;
Graph.Chart wdchart = (Graph.Chart)range.InlineShapes.AddOLEObject(oClassType).OLEFormat.Object;
wdchart.Application.DataSheet.Cells.Clear();//清空数据集数据
//axis.MaximumScale = 1;//设置最大刻度

//填充数据集 
int i, j;
for (i = 0; i < 3; i++) 
{
wdchart.Application.DataSheet.Cells[i + 1, 1] = "列" + i.ToString();
}
for (i = 0; i < 4; i++)//填充数据 
{
for (j = 0; j < 4; j++)
{
wdchart.Application.DataSheet.Cells[i + 2, j + 1] = i * j;
}
}

//根据y轴画图 
wdchart.Application.PlotBy = Graph.XlRowCol.xlColumns;

wdchart.Legend.Delete();
wdchart.Height = 280;
wdchart.Width = 600;

//更新图标并退出 
wdchart.Application.Update();
wdchart.Application.Quit();
wdchart = null;
}
}

//doc.SaveAs("E:\\Test.docx");
//app.Quit();
}


        上图中主要代码已经列出,原理很简单,注释很清楚了不再解释,如果需要源代码请克隆本项目,并获取相应的版本:

        本方法运行结果如下:



Github位置:
https://github.com/HymanLiuTS/OfficeTestByC-
克隆本项目:
git clone git@github.com:HymanLiuTS/OfficeTestByC-.git
获取本文源代码:
git checkout L08_1

待续…

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用Microsoft.Office.Interop.Word命名空间的API来向指定的Word文档插入数据,以下是一个简单的示例: 1. 首先在项目引用Microsoft.Office.Interop.Word库。 2. 创建一个Word应用程序对象。 ```csharp using Microsoft.Office.Interop.Word; Application wordApp = new Application(); ``` 3. 打开指定的Word文档。 ```csharp Document doc = wordApp.Documents.Open(@"C:\test.docx"); ``` 4. 在文档插入数据。 ```csharp // 插入文本 doc.Content.InsertAfter("这是插入的文本。"); // 插入表格 Table table = doc.Tables.Add(doc.Content, 3, 3); table.Cell(1, 1).Range.Text = "表格1"; table.Cell(2, 2).Range.Text = "表格2"; table.Cell(3, 3).Range.Text = "表格3"; ``` 5. 保存文档。 ```csharp doc.Save(); ``` 6. 关闭Word文档。 ```csharp doc.Close(); ``` 7. 关闭Word应用程序。 ```csharp wordApp.Quit(); ``` 完整的代码示例: ```csharp using System; using Microsoft.Office.Interop.Word; namespace WordTest { class Program { static void Main(string[] args) { // 创建Word应用程序对象 Application wordApp = new Application(); // 打开指定的Word文档 Document doc = wordApp.Documents.Open(@"C:\test.docx"); // 在文档插入数据 doc.Content.InsertAfter("这是插入的文本。"); // 插入表格 Table table = doc.Tables.Add(doc.Content, 3, 3); table.Cell(1, 1).Range.Text = "表格1"; table.Cell(2, 2).Range.Text = "表格2"; table.Cell(3, 3).Range.Text = "表格3"; // 保存文档 doc.Save(); // 关闭Word文档 doc.Close(); // 关闭Word应用程序 wordApp.Quit(); Console.WriteLine("Word文档已保存。"); Console.ReadLine(); } } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值