如何使用VSTO自动将Excel中的图表复制到Word

原文地址:https://code.msdn.microsoft.com/How-to-copy-Chart-in-Excel-a29f9029

该项目说明如何使用VSTO自动复制Excel中的图表

介绍

有些客户经常在MSDN论坛上提出这个问题。 但在MSDN画廊中没有现有的样本。 所以如果有样品,可以帮助客户解决问题。

客户证据:

http://social.msdn.microsoft.com/Forums/en-US/isvvba/thread/21a2fd18-d850-40d9-9d87-122bbaf9369d

http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/8d94da85-a95f-41c0-b7ec-6bf34fd0e151

创建项目

在Visual Studio 2013中打开项目(VBNETExportExcelChartToWord.vbproj)并构建它。

VB代码:

 Module Module1
Sub Main(args As String())
Try
Dim appPath As String = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
Dim excelFile As String = appPath & Convert.ToString("\TestExcel.xlsx")
Dim wordFile As String = appPath & Convert.ToString("\TestDoc.docx")
ExportChartDataToWord(excelFile, wordFile)
Console.WriteLine("Chart exported to word document successfully")
Console.ReadLine()
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub
Sub ExportChartDataToWord(excelFile As String, wordFile As String)
Dim objExcelApp As Microsoft.Office.Interop.Excel._Application = New Microsoft.Office.Interop.Excel.Application()
objExcelApp.Visible = False
Dim workbook As Microsoft.Office.Interop.Excel._Workbook = objExcelApp.Workbooks.Open(excelFile)
Dim worksheet As Microsoft.Office.Interop.Excel._Worksheet = DirectCast(workbook.Sheets(), Microsoft.Office.Interop.Excel.Worksheet)
Dim charObj As Microsoft.Office.Interop.Excel.ChartObject = worksheet.ChartObjects("Chart 1")
Dim objWordApp As Microsoft.Office.Interop.Word._Application = New Microsoft.Office.Interop.Word.Application()
If objWordApp Is Nothing Then
Console.WriteLine("Word could not be started. Check that your office installation and project references are correct.")
Return
End If
objWordApp.Visible = False
Dim objDoc As Microsoft.Office.Interop.Word._Document = objWordApp.Documents.Open(wordFile)
charObj.Chart.ChartArea.Copy()
objDoc.Application.Selection.PasteSpecial()
'Save the doc
objDoc.Save()
'Close the open docs and workbooks
objWordApp.Documents.Close()
objWordApp.Quit()
objExcelApp.Workbooks.Close()
objExcelApp.Quit()
End Sub
End Module

1.此示例从Excel文件中复制图表对象内容,然后使用VSTO方式将其粘贴到Word文档中。
2.在执行示例之前,将TestDoc.docx和TestExcel.xlsx文件复制到可执行位置。
3.运行可执行文件VBNETExportExcelChartToWord.exe,这将会将图表内容复制到名为TestDoc.docx的单词文档中?
4.打开word文档并验证其内容。

Imports System.IO
Imports Microsoft.Office.Interop.Excel
Imports Microsoft.Office.Interop.Word
Module Module1 Sub Main()
Try
Dim appPath As String = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
Dim excelFile As String = appPath & Convert.ToString("\TestExcel.xlsx")
Dim wordFile As String = appPath & Convert.ToString("\TestDoc.Docx")
ExportChartDataToWord(excelFile, wordFile)
Console.WriteLine("Chart exported to word document successfully")
Console.ReadLine()
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Console.Read()
End Sub
Sub ExportChartDataToWord(excelFile As String, wordFile As String)
Dim objExcelApp As Microsoft.Office.Interop.Excel._Application = New Microsoft.Office.Interop.Excel.Application()
objExcelApp.Visible = False
Dim workbook As Microsoft.Office.Interop.Excel._Workbook = objExcelApp.Workbooks.Open(excelFile)
Dim worksheet As Microsoft.Office.Interop.Excel._Worksheet = DirectCast(workbook.Sheets(), Microsoft.Office.Interop.Excel.Worksheet) 'DirectCast类似于Ctype,不过要求必须前后的类型一致
Dim charObj As Microsoft.Office.Interop.Excel.ChartObject = worksheet.ChartObjects("chart 3")
Dim objWordApp As Microsoft.Office.Interop.Word._Application = New Microsoft.Office.Interop.Word.Application()
If objWordApp Is Nothing Then
Console.WriteLine("Word could not be started.Check that your office installation and project references are correct.")
Return
End If
objWordApp.Visible = False
Dim objDoc As Microsoft.Office.Interop.Word._Document = objWordApp.Documents.Open(wordFile)
charObj.Chart.ChartArea.Copy()
objDoc.Application.Selection.PasteSpecial()
'Save the doc
objDoc.Save()
'Close the open docs and workbooks
objWordApp.Documents.Close()
objWordApp.Quit()
objExcelApp.Workbooks.Close()
objExcelApp.Quit() End Sub
End Module

如何使用VSTO自动将Excel中的图表复制到Word的更多相关文章

  1. Excel画的图复制到Word中变形的解决办法

    在Excel里画好了图,复制到Word里面经常会变形变的一塌糊涂,面目全非,实在是不理解微软为什么要把自己家的软件搞成这样. 要想保持形状不变,需要这样做: 1. 在Excel里面复制图形,和往常一样 ...

  2. 将excel中的数据填入word模板中-VBA

    首先将word模板中需要填写excel中数据的空白处用自己独特的字符串标记,比如   数据001  什么的.如下图: 这样,就可以用vba搜寻这些自己独特的标记来根据excel内容填充word了. 第 ...

  3. EXCEL 中数据 批量 填充进 word 中

    工具:Python3.7 需求描述:将EXCEL中 第二行 数据 填在 word 对应位置上,然后保存为 "姓名+任务.docx"文件. 再将EXCEL中 第三行 数据 填在 wo ...

  4. Java 添加、读取、删除Excel中的图表趋势线

    本文以Java示例介绍如何在Excel中添加趋势线,以及读取趋势线公式.通过文中的方法可支持添加6种不同类型的趋势线,包括Linear.Exponential.Logarithmic.Moving A ...

  5. 利用openxml在Excel中插入图表

    using System.Collections.Generic; using System.Linq; using DOD = DocumentFormat.OpenXml.Drawing; usi ...

  6. 使用Eclipse在Excel中找出两张表中相同证件号而姓名或工号却出现不同的的项

    1:首先把Excel中的文本复制到txt中,复制如下: A表: 证件号                           工号  姓名 310110xxxx220130004 101 傅家宜3101 ...

  7. VBA在Excel中的应用(三)

    目录  Chart Export Chart Format Chart Lengend  Chart Protect  Chart Title  Chart Chart Export 1. 将Exce ...

  8. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂安装过程详解及安装失败解决方法

    因Excel催化剂用了VSTO的开发技术,并且为了最好的用户体验,用了Clickonce的布署方式(无需人工干预自动更新,让用户使用如浏览器访问网站一般,永远是最新的内容和功能).对安装过程有一定的难 ...

  9. Excel自动从身份证中提取生日、性别、年龄

    现在学生的身份证号已经全部都是18位的新一代身份证了,里面的数字都是有规律的.前6位数字是户籍所在地的代码,7-14位就是出生日期.第17位“2”代表的是性别,偶数为女性,奇数为男性.我们要做的就是把 ...

随机推荐

  1. 解码字符串 Decode String

    2018-11-14 17:56:12 问题描述: 问题求解: 方法一.递归求解 最直观的解法就是递归来求了,并且很显然的这个问题可以使用递归来进行求解. public String decodeSt ...

  2. (转)C#连接OleDBConnection数据库的操作

    对于不同的.net数据提供者,ADO.NET采用不同的Connection对象连接数据库.这些Connection对我们屏蔽了具体的实现细节,并提供了一种统一的实现方法. Connection类有四种 ...

  3. MySQL事务(一)

    一.基本介绍 事务就是一组dml语句,这些语句存在逻辑上的相关性,这一组dml语句要么全部成功,要么全部失败,是一个整体.ACID属性(原子性,一致性,隔离性,持久性):mysql提供一种机制,保证我 ...

  4. Tempter of the Bone HDU - 1010

    The doggie found a bone in an ancient maze, which fascinated him a lot. However, when he picked it u ...

  5. js的正则表达式的替换

    <!DOCTYPE html><html><head><meta charset="UTF-8"><title>Inse ...

  6. hdu-1817-polya

    Necklace of Beads Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. jqgrid取所有行的值,jqgrid取行对应列(name)的值,jqgrid取多行值对应列转json的方法

    1.jqgrid取所有行的值(#gridTable指对应table的ID) var obj = $("#gridTable").jqGrid("getRowData&qu ...

  8. git 连接github的配置

    这段时间要先在git上开发,上传代码到github上,所以首先需配置本地的git和github. 这几篇文章都不错,可以参考一下,大体的配置都很清楚. 1:https://blog.csdn.net/ ...

  9. 【九校联考-24凉心模拟】锻造(forging)

    题目背景 勇者虽然武力值很高,但在经历了多次战斗后,发现怪物越来越难打, 于是开始思考是不是自己平时锻炼没到位,于是苦练一个月后发现……自 己连一个史莱姆都打不过了. 勇者的精灵路由器告诉勇者其实是他 ...

  10. Android Studio向项目添加C/C++原生代码教程

    说明:本文相当于官方文档的个人重新实现,官方文档链接:https://developer.android.com/studio/projects/add-native-code 向项目添加C/C++代 ...