当我们在处理Microsoft Word文档时,经常会遇到嵌入了Excel附件的情况。在这种情况下,我们可能需要提取嵌入式Excel文件并将其保存为单独的文件。在本文中,我们将探讨如何使用Python、Java、JavaScript、Go、C#和C++来提取Word文档中的Excel附件并识别文件名保存。

目录

一、提取Word文档中的Excel附件

二、利用Python脚本提取Word中的Excel表格

1、安装Python和相关库

2、Python程序实现

三、通过Java提取Word中的Excel表格

四、通过JavaScript提取Word中的Excel表格

五、通过 go实现提取Word文档中的Excel附件并识别文件名保存

六、通过 c#和c++实现提取Word文档中的Excel附件并识别文件名保存


一、提取Word文档中的Excel附件

在Word文档中,我们会经常插入一些Excel表格,这些表格附件是包含在Word文档中的。要提取Word文档中的Excel附件并识别文件名保存,我们需要执行以下步骤:

1、打开Word文档并切换到“文件”菜单,在“文件”菜单中选择“另存为”选项。

2、在弹出的另存为菜单中,选择“单个网页(.htm,.html)”后另存为一个htm文件。

3、打开生成的htm文件,找到包含Excel附件的链接。

4、通过右键点击Excel附件链接并选择“另存为”选项,将Excel表格下载到本地计算机中,同样可以使用python脚本来实现。

二、利用Python脚本提取Word中的Excel表格

Python是一种很强大的编程语言,它为我们提供了许多方便的工具和库。在Python中,我们可以使用docx、xlrd、xlsxwriter等常用库来实现从Word文档提取Excel表格并进行文件名读取和保存的功能。

1、安装Python和相关库

在开始使用Python程序之前,我们需要先安装Python和相关库。在Python官网中,您可以下载最新的Python安装程序并安装在您的计算机上。在安装完成后,您可以使用pip工具来安装所需的库,其中包括docx、xlrd、xlsxwriter等库。

2、Python程序实现

在Python中,我们可以使用docx、xlrd、xlsxwriter等库来实现从Word文档提取Excel表格并进行文件名读取和保存的功能。一个用Python编写的样例程序如下所示:

import os
from docx import Document
import xlrd, xlwt                         def get_excel_name(path):workbook = xlrd.open_workbook(path)names = workbook.sheet_names()return names[0]def extract_excel(filename):doc = Document(filename)for obj in doc.inline_shapes:if obj.type == 3:                   info = obj._inline._element[0][0][1].attrib            r_id = info.get('{http://schemas.openxmlformats.org/officeDocument/2006/relationships}id')part = obj.part.related_parts[r_id]excel_file = part.blob                    name = get_excel_name(part.partname)          with open(name + ".xlsx", 'wb') as f:f.write(excel_file)print("Successfully extract" + name + ".xlsx!")if __name__ == '__main__':extract_excel("test.docx")

在实现中,我们首先通过使用xlrd库来读取所处理的Excel表格的文件名,然后利用docx库来提取Word文档中的表格附件,最后使用Python内置的with关键字来保存这些附件,并以正确的文件名命名。


三、通过Java提取Word中的Excel表格

在Java中可以使用Apache POI库来提取Word文档中的Excel附件并识别文件名保存。以下是代码示例:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.openxml4j.opc.PackageRelationship;
import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
import org.apache.poi.openxml4j.opc.TargetMode;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;public class ExtractExcelFromWord {public static void main(String[] args) throws Exception {String wordFilePath = "path/to/word/file.docx";String excelSaveDirPath = "path/to/excel/save/dir";InputStream wordIS = new FileInputStream(wordFilePath);OPCPackage opc = OPCPackage.open(wordIS);PackageRelationshipCollection prc = opc.getRelationshipsByType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject");// Iterate over each embedded object and extract Excel filefor (Iterator it = prc.iterator(); it.hasNext();) {PackageRelationship pr = (PackageRelationship) it.next();if (pr.getTargetMode() == TargetMode.INTERNAL) {PackagePart pp = opc.getPart(pr.getTargetURI());String contentType = pp.getContentType();if (contentType.equals("application/vnd.ms-excel")) {String excelFileName = pr.getTargetURI().toString().substring(pr.getTargetURI().toString().lastIndexOf('/') + 1);excelFileName = excelFileName.replaceAll("%20", " ");OutputStream os = new FileOutputStream(excelSaveDirPath + "/" + excelFileName);os.write(pp.getByteArray());os.close();}}}// Close resourcesopc.close();wordIS.close();}
}

以上代码通过打开Word文件并获取包含Excel附件的PackageRelationshipCollection。然后针对每个PackageRelationship检查其目标类型是否是“application/vnd.ms-excel”,如果是则提取Excel附件到指定目录,并使用URI的最后一部分作为Excel文件名。


四、通过JavaScript提取Word中的Excel表格

在JavaScript中,可以使用JSZip库来提取Word文档中的Excel附件并识别文件名保存。以下是代码示例:

var wordFilePath = "path/to/word/file.docx";
var excelSaveDirPath = "path/to/excel/save/dir";
var zip = new JSZip();// Load Word document
JSZipUtils.getBinaryContent(wordFilePath, function(err, content) {if (err) {throw err;}// Extract Excel files from Word documentzip.loadAsync(content).then(function(zip) {Object.keys(zip.files).forEach(function(filename) {if (filename.indexOf("word/embeddings/") === 0 && filename.indexOf(".xlsx") !== -1) {var excelFile = zip.file(filename);var excelFileName = filename.substring(filename.lastIndexOf("/") + 1);excelFileName = excelFileName.replaceAll("%20", " ");excelFile.async("blob").then(function(excelBlob) {var excelSavePath = excelSaveDirPath + "/" + excelFileName;saveAs(excelBlob, excelSavePath);});}});});
});

以上代码通过加载Word文档,并使用JSZip库提取包含Excel附件的压缩文件。然后,针对每个Excel文件的文件名检查是否符合条件(位于“word/embeddings/”目录下并以“.xlsx”结尾)。如果是,则提取Excel文件,并使用文件名保存到指定路径中。由于JSZip的异步加载特性,需要使用Promise来确保在提取Excel文件后进行保存。

请注意,上面的代码中使用了FileSaver.js库来在浏览器中保存文件。如果您使用的是Node.js环境,则应该使用fs模块来保存文件。

五、通过 go实现提取Word文档中的Excel附件并识别文件名保存

在Golang中,可以使用go-zip库来提取Word文档中的Excel附件并识别文件名保存。以下是代码示例:

package mainimport ("archive/zip""fmt""io""os""path/filepath""strings"
)func main() {wordFilePath := "path/to/word/file.docx"excelSaveDirPath := "path/to/excel/save/dir"r, err := zip.OpenReader(wordFilePath)if err != nil {fmt.Println("Failed to open zip file: ", err)return}defer r.Close()// Iterate through the files in the zip archivefor _, f := range r.File {if strings.HasPrefix(f.Name, "word/embeddings/") && strings.HasSuffix(f.Name, ".xlsx") {// Extract and save Excel fileexcelFileName := filepath.Base(f.Name)excelFilePath := excelSaveDirPath + "/" + excelFileNamefmt.Println("Extracting Excel file: ", excelFileName)excelFile, err := os.Create(excelFilePath)if err != nil {fmt.Println("Failed to create Excel file: ", err)return}defer excelFile.Close()excelReader, err := f.Open()if err != nil {fmt.Println("Failed to open Excel file: ", err) return}defer excelReader.Close()_, err = io.Copy(excelFile, excelReader)if err != nil {fmt.Println("Failed to save Excel file: ", err)return}}}
}

以上代码通过使用zip包打开Word文档,并迭代每个zip.Entry(类似于文件)。如果条目的名称以“word/embeddings/”开头且以“.xlsx”结尾,则表示该条目是Excel文件的嵌入对象。然后,提取并保存Excel文件到指定目录。

请注意,上面的实现并未解压整个Word文档,而是只处理了包含Excel文件的zip.Entry。这种方法的好处是避免占用不必要的空间和时间,但它也意味着不能读取Word文档中的其他内容。如需读取整个Word文档,请参考其他go-zip库文档,或使用其他文档读取库。


六、通过 c#和c++实现提取Word文档中的Excel附件并识别文件名保存

在C#和C++中,可以使用Microsoft.Office.Interop.Word库来提取Word文档中的Excel附件并识别文件名保存。以下是C#代码示例:

using Microsoft.Office.Interop.Word;// ...string wordFilePath = "path/to/word/file.docx";
string excelSaveDirPath = "path/to/excel/save/dir";Application wordApplication = new Application();
Document wordDocument = wordApplication.Documents.Open(wordFilePath);// Iterate over each embedded object and extract Excel files
foreach (InlineShape shape in wordDocument.InlineShapes) {if (shape.OLEFormat != null && shape.OLEFormat.ClassType == "Excel.Sheet.12") {string embeddedFilePath = Path.Combine(excelSaveDirPath, shape.OLEFormat.IconLabel);shape.OLEFormat.Object.SaveAs(embeddedFilePath);}
}// Close resources
wordDocument.Close(false);
wordApplication.Quit(false);

以上代码通过加载Word文档并使用Microsoft.Office.Interop.Word库提取包含Excel附件的OLE对象。针对每个OLE对象检查其类型是否为“Excel.Sheet.12”,如果是,则将Excel文件提取并保存到指定目录中,使用OLE对象的IconLabel属性作为Excel文件名。


以下是C++代码示例:

#include <iostream>
#include <msword.olb>
#include <atlcomcli.h>void extractExcelFromWord(std::string wordFilePath, std::string excelSaveDirPath) {CoInitialize(NULL);_ApplicationPtr wordApplication;_DocumentPtr wordDocument;_InlineShapesPtr inlineShapes;// Start Word and open documentwordApplication.CreateInstance("Word.Application");wordApplication->Visible = false;wordDocument = wordApplication->Documents->Open(&wordFilePath[0]);// Extract Excel files from Word documentinlineShapes = wordDocument->InlineShapes;for (long i = 1; i <= inlineShapes->Count; ++i) {InlineShapePtr shape = inlineShapes->Item(i);if (shape->OLEFormat != NULL && shape->OLEFormat->ClassType == "Excel.Sheet.12") {std::string embeddedFilePath = excelSaveDirPath + "\\" + shape->OLEFormat->IconLabel;shape->OLEFormat->Object->SaveAs(&embeddedFilePath[0]);}}// Close resourceswordDocument->Close(0);wordApplication->Quit(0);CoUninitialize();
}int main() {std::string wordFilePath = "path\\to\\word\\file.docx";std::string excelSaveDirPath = "path\\to\\excel\\save\\dir";extractExcelFromWord(wordFilePath, excelSaveDirPath);return 0;
}

以上代码通过加载Word文档使用Microsoft.Office.Interop.Word库提取包含Excel附件的OLE对象。For循环来迭代每个InlineShape,如果Shape的类型是Excel文档,则将其保存到指定的文件夹中,使用OLE对象的IconLabel属性作为Excel文件名。

请注意,在C++中使用Microsoft.Office.Interop.Word库需要将Microsoft Word安装到电脑上,并添加对msword.olb库的引用。

革新文档管理:使用多种编程语言从 Word 中提取 Excel 附件和文件名相关推荐

  1. word文档图片画红线_在Word中巧妙绘制漂亮分割线的方法

    使用Word编辑文档时,可能为了使某些内容醒目显示,或者为了使文档内容显示的更美观.更有层次感,需要为文档添加一些分割线.在Word 2007中,如果能够掌握一些绘制分割线的小技巧,可以帮助用户快速美 ...

  2. word文档html图片不能移动,win7系统Word中插入的图片不能移动的解决方法

    很多小伙伴都遇到过win7系统Word中插入的图片不能移动的困惑吧,一些朋友看过网上零散的win7系统Word中插入的图片不能移动的处理方法,并没有完完全全明白win7系统Word中插入的图片不能移动 ...

  3. word 文档操作类,可以读出word中书签 批量替换内容,直接调用

    using System; using System.Collections.Generic; using System.Text; using Word = Microsoft.Office.Int ...

  4. “云脉文档管理”微信小程序提供高效的办公体验

    在如今的大数据时代,每个企业以及个人,都会有大量的文件需要被管理.在此基础上,ocr人工智能就孕育而生了,它不仅仅能够为企业带来高效的办公效率,而且还能使无序的纸张,变的更容易管理,能够做到在海量的数 ...

  5. wordContrl word文档管理工具

    wordContrl 介绍 word文档管理工具,具有创建word文档.编辑word文档.将word文档转为文本等功能 软件架构 软件架构说明 安装教程 xxxx xxxx xxxx 下载地址:git ...

  6. 文档管理对人力资源部门的重要影响

    文档管理对人力资源部门的重要影响 当人力资源的管理功能是基于纸张或依赖于 Excel 电子表格.共享驱动器和其他无法与其他系统共享数据的软件等技术时,人力资源管理既耗时又耗费劳动力.用数字工作流程取代 ...

  7. 如何把网页保存成html文档,怎么把网页存成word

    怎样把网页文件保存成word文件 1.首先打开网页后单击浏览器菜单栏的"文件",找到"网页另存为"选项,点击. 2.在弹出来的"另存为"窗口 ...

  8. 几款接口文档管理工具

    在项目开发测试中,接口文档是贯穿始终的.前后端开发需要在开发前期进行接口定义并形成文档,QA在功能测试和接口测试的环节也需要依赖于这些接口文档进行测试.接口文档往往以最简单的静态文档的形态存在.然而在 ...

  9. 接口文档管理工具-Postman、Swagger、RAP、DOClever

    在项目开发测试中,接口文档是贯穿始终的.前后端开发需要在开发前期进行接口定义并形成文档,QA在功能测试和接口测试的环节也需要依赖于这些接口文档进行测试.接口文档往往以最简单的静态文档的形态存在.然而在 ...

最新文章

  1. 云服务器适合什么样的用户?
  2. [Trustzone]-ARM Cortex-A Serial支持Trustzone和Hypervisor的总结
  3. opengl加载显示3D模型md2类型文件
  4. c++ 获取计算机域名_每日一题| 计算机考研20200825
  5. 第一章 1 常用库之time
  6. python选择表单_如何使用Python在表单中选择选项?
  7. python+selenium 爬携程机票价格
  8. cuda11+pytorch安装
  9. 大数据平台搭建_【他山之石】自研搭建Hadoop数据科学开发环境,促进大数据平台建设降本增效...
  10. Javascript设置对象的ReadOnly属性
  11. 通过javaBean反射转换成mybatis映射文件
  12. 监控延迟严重怎么解决_监控画面故障解决:网络监控画面没有图像显示或无视频信号怎么办...
  13. linux web部署命令简单记录
  14. Kettle下载资源
  15. 排序算法之冒泡排序(图解)
  16. 牛客(基础位运算)起床困难症
  17. 南京大学计算机系2019复试离散题目-逻辑与推理
  18. matlab中求特征值的eig函数说明
  19. python头像转卡通_Python实现将照片变成卡通图片的方法【基于opencv】
  20. 如何规划与实施数字化工厂?

热门文章

  1. code函数oracle列子,Oracle内置函数SQLCODE和SQLERRM的使用
  2. wordcloud词云报错ValueError: Only supported for TrueType fonts
  3. C#程序设计_计程车车费
  4. 来自2020年应届生毕业后的第一段实习经历以及对未毕业同学们的一些友好提示
  5. 报数游戏(2)--【英雄会】
  6. python常用命令参考手册_Python基础#常用命令和函数
  7. SDNU-1543.Happy Salted Fish Every Day
  8. 查询Ip、身份证、手机所在地代码
  9. [转载自果壳网]你拿披萨的方式,很…
  10. 昨晚尤大的连麦直播,我学到了很多!!!