如何使用VSTO自动将Excel中的图表复制到Word
如何使用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的更多相关文章
- Excel画的图复制到Word中变形的解决办法
在Excel里画好了图,复制到Word里面经常会变形变的一塌糊涂,面目全非,实在是不理解微软为什么要把自己家的软件搞成这样. 要想保持形状不变,需要这样做: 1. 在Excel里面复制图形,和往常一样 ...
- 将excel中的数据填入word模板中-VBA
首先将word模板中需要填写excel中数据的空白处用自己独特的字符串标记,比如 数据001 什么的.如下图: 这样,就可以用vba搜寻这些自己独特的标记来根据excel内容填充word了. 第 ...
- EXCEL 中数据 批量 填充进 word 中
工具:Python3.7 需求描述:将EXCEL中 第二行 数据 填在 word 对应位置上,然后保存为 "姓名+任务.docx"文件. 再将EXCEL中 第三行 数据 填在 wo ...
- Java 添加、读取、删除Excel中的图表趋势线
本文以Java示例介绍如何在Excel中添加趋势线,以及读取趋势线公式.通过文中的方法可支持添加6种不同类型的趋势线,包括Linear.Exponential.Logarithmic.Moving A ...
- 利用openxml在Excel中插入图表
using System.Collections.Generic; using System.Linq; using DOD = DocumentFormat.OpenXml.Drawing; usi ...
- 使用Eclipse在Excel中找出两张表中相同证件号而姓名或工号却出现不同的的项
1:首先把Excel中的文本复制到txt中,复制如下: A表: 证件号 工号 姓名 310110xxxx220130004 101 傅家宜3101 ...
- VBA在Excel中的应用(三)
目录 Chart Export Chart Format Chart Lengend Chart Protect Chart Title Chart Chart Export 1. 将Exce ...
- 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂安装过程详解及安装失败解决方法
因Excel催化剂用了VSTO的开发技术,并且为了最好的用户体验,用了Clickonce的布署方式(无需人工干预自动更新,让用户使用如浏览器访问网站一般,永远是最新的内容和功能).对安装过程有一定的难 ...
- Excel自动从身份证中提取生日、性别、年龄
现在学生的身份证号已经全部都是18位的新一代身份证了,里面的数字都是有规律的.前6位数字是户籍所在地的代码,7-14位就是出生日期.第17位“2”代表的是性别,偶数为女性,奇数为男性.我们要做的就是把 ...
随机推荐
- sublime Text如何取消两栏窗口?
在菜单栏里的 View->LayOut->Single,也可以用快捷键 Alt+Shift+1.如图所示.(亲测可用) <img src="https:// ...
- MySQL中如何实现select top n ----Limit
Mysql中limit的用法详解 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. LIMIT 子句可以被用于强制 S ...
- 数据结构(C语言版)-第5章 树和二叉树
5.1 树和二叉树的定义 树(Tree)是n(n≥0)个结点的有限集,它或为空树(n = 0):或为非空树,对于非空树T:(1)有且仅有一个称之为根的结点:(2)除根结点以外的其余结点可分为m(m& ...
- RepBaseRepeatMaskerEdition下载 | RepeatMasker
开源的生物信息世界居然有这么个需要注册才能下载的工具,开源世界不是怎么方便怎么来吗? 这个注册真的麻烦,这里上传了一个可以使用的版本. RepBaseRepeatMaskerEdition-20170 ...
- java.lang.NoClassDefFoundError: org/springframework/web/context/WebApplicationContext
一.NoClassDefFoundError与ClassNotFoundException NoClassDefFoundError错误的发生,是因为Java虚拟机在编译时能找到合适的类,而在运行时不 ...
- LeetCode--278--第一个错误的版本
问题描述: 你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最新版本没有通过质量检测.由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的. 假设你有 n 个 ...
- 「SDOI2008」Sandy 的卡片
用第一个串建立后缀自动机.然后别的串在上面跑.从根节点开始.如果当前不能转移,一直移到slink或者根.如果移到根,能匹配长度变为0,否则变为maxlen[能转移的点]+1,再转移.转移完往slink ...
- android -------- Data Binding的使用 ( 五) include
Data Binding的中 include 标签的使用 inclune使用和原来一样,但要如何使数据也在 include中使用呢? 先看看我的布局文件 include的布局文件,也要使用 <l ...
- PHP用PDO
$pdo = new PDO('mysql:host=localhost;dbname=jmyp','root','root'); $pdo->exec('set names utf8'); $ ...
- 4.1.6 Grundy数-硬币游戏2
Problem Description: Alice 和 Bob 在玩一个游戏.给定 k 个数字 a1,a2,……,ak.一开始,有n堆硬币,每堆各有 Xi 枚硬币.Alice 和 Bob 轮流选出一 ...