我必须更新一个word文档,它以可编辑表格的形式嵌入了excel电子表格。我必须使用Java以编程方式更新这个表,以替换文档中嵌入的excel表中的值。为了获得excel电子表格对象的句柄,我研究了Apache POI(HWPFDocument方法)的所有可能选项,但到目前为止还没有找到任何方法选项可以控制该对象。
我有同样的问题,我一直在寻找,但我没有找到明确的答案,我们如何更新嵌入式excel文件到一个word文件,尝试了许多解决方案后,我找到了一种方法,更新或复制数据到excel嵌入式文件使用POI,也许是晚了,但我希望它能帮助其他人面临同样的问题。下面的代码示例基于此链接中的代码
在本例中,我们有一个word文档(Microsoft Office2007及以上版本),它有两个嵌入式excel文件,我们将用不同的内容(数据)更新这两个文件,
您可以尝试修改此代码以支持Word2003
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import java.io.*;
import java.util.List;
import java.util.logging.Logger;
public class UpdateEmbeddedDoc {
private XWPFDocument doc;
private File docFile;
private static final String BINARY_EXTENSION = "xls";
private static final String OPENXML_EXTENSION = "xlsx";
private final static Logger LOGGER =
Logger.getLogger(UpdateEmbeddedDoc.class.getName());
// Here in the contractor we give the path of the word document (docFilePath) that it contains the excel embedded files
public UpdateEmbeddedDoc(String docFilePath) throws FileNotFoundException,
IOException {
this.docFile = new File(docFilePath);
if (!this.docFile.exists()) {
throw new FileNotFoundException("The Word document " + docFilePath + " does not exist.");
}
try (FileInputStream fis = new FileInputStream(this.docFile)) {
// Open the Word document file and instantiate the XWPFDocument class.
this.doc = new XWPFDocument(fis);
}
}
public void updateEmbeddedDoc(String ExcelFile1, String ExcelFile2) throws OpenXML4JException, IOException {
List<PackagePart> embeddedDocs = this.doc.getAllEmbeddedParts();
//in this example we have two embedded excel files the first one it is in first index 0
//the second excel file will be on the second index 1 (0 based index)
PackagePart pPart0 = embeddedDocs.get(0);
PackagePart pPart1 = embeddedDocs.get(1);
LOGGER.info("embedded first part : " + embeddedDocs.get(0));
LOGGER.info("embedded second part : " + embeddedDocs.get(1));
//Here we are calling copyWorkbook method and give the path of the excel file (ExcelFile1 and ExcelFile2 )
// that it contains the data that we want to copy to embedded execl files (pPart0 and pPart1 )
copyWorkbook(ExcelFile1, pPart0);
copyWorkbook(ExcelFile2, pPart1);
if (!embeddedDocs.isEmpty()) {
try (FileOutputStream fos = new FileOutputStream(this.docFile)) {
this.doc.write(fos);
}
}
}
public void copyWorkbook(String inputExelFilePath, PackagePart pPart) {
try {
FileInputStream file = new FileInputStream(inputExelFilePath);
Workbook workbookInput = new XSSFWorkbook(file);
String ext = pPart.getPartName().getExtension();
if (BINARY_EXTENSION.equals(ext) || OPENXML_EXTENSION.equals(ext)) {
try (
OutputStream os = pPart.getOutputStream()) {
//Here we write our workbook (excel file) to the outputStream that refer to excel embedded file
workbookInput.write(os);
} catch (IOException e) {
LOGGER.severe("Could not update the excel file : " + e.getMessage());
}
}
} catch (IOException e) {
LOGGER.severe("Could not update the excel file : " + e.getMessage());
}
}
public class VdslmopApplication {
private final static Logger logger = Logger.getLogger(VdslmopApplication.class.getName());
public static void main(String[] args) {
// here we provide all the path for the files word document file and the two excel files
//its better to provide relative path to the files
String docFilePath = "docfile/docTest.docx";
String excelFile1Path = "excelFile/excelFile1.xlsx";
String excelFile2Path = "excelFile/excelFile2.xlsx";
try {
UpdateEmbeddedDoc ued = new UpdateEmbeddedDoc(docFilePath);
ued.updateEmbeddedDoc(excelFile1Path, excelFile2Path);
logger.info("Doc file has been successfully updated ");
} catch (IOException e) {
e.printStackTrace();
} catch (OpenXML4JException e) {
e.printStackTrace();
}
}
}
我是Python新手。我需要将程序中的一些数据写入电子表格。我在网上搜索过,似乎有很多可用的软件包(xlwt、XlsXcessive、openpyxl)。其他人建议写信给一家公司。csv文件(从未使用过csv,也不了解它是什么)。 程序非常简单。我有两个列表(float)和三个变量(string)。我不知道这两个列表的长度,它们可能不会是相同的长度。 我希望布局如下图: 粉红色列将具有第一个列表的
问题内容: 我需要将程序中的一些数据写入电子表格。我在网上搜索过,似乎有很多可用的软件包(xlwt,XlsXcessive,openpyxl)。其他人则建议写入.csv文件(从未使用过CSV,也不真正了解它是什么)。 该程序非常简单。我有两个列表(浮点数)和三个变量(字符串)。我不知道两个列表的长度,它们的长度可能不一样。 粉色列将具有第一个列表的值,绿色列将具有第二个列表的值。 那么最好的方法是
我在更新google drive上的现有电子表格时遇到了一个问题,没有使用批量更新(现在我甚至不确定是否可能) 我已经有一些数据现有的电子表格,然后我检索文件从谷歌驱动器通过 我很容易通过名称匹配我的文件,然后我只想在创建的文件中更新电子表格。 这里我从匹配名称的文件中获取电子表格,然后我只想把empy表放在那里(例如)。 第一点,我不确定如何正确地“更新”驱动器上的电子表格,因为我无法使用 我不
问题内容: 我正在寻找使用openpyxl将行插入电子表格的最佳方法。 实际上,我有一个电子表格(Excel 2007),该电子表格具有标题行,其后最多(数千)行数据。我希望将行插入为实际数据的第一行,因此在标题之后。我的理解是,附加功能适合于将内容添加到 结尾 的文件。 阅读有关openpyxl和xlrd(以及xlwt)的文档,除了手动循环浏览内容并将其插入新表(在插入所需行之后)之外,我找不到
问题内容: 我想在数据库中建立表格以在Excel工作表中获取大量联系信息,以便我可以在数据库中进行维护。 我尝试遵循从SQL Server 2008 R2导入导入/导出平面文件的操作,但此操作不起作用。谁能告诉我如何将电子表格成功导入数据库中的表中? 谢谢 问题答案: 有一个Microsoft知识库文章,列出了所有可能的方法。 http://support.microsoft.com/kb/321
问题内容: 我需要在电子邮件中嵌入图像。我该怎么做? 我既不想使用第三方工具,也不想对特定于语言的答案感兴趣(但是如果您想知道的话,它就是PHP)。 我只对生成的电子邮件正文的格式感兴趣。 问题答案: 如您所知,作为电子邮件传递的所有内容都必须文本化。 您必须创建包含多部分/ mime消息的电子邮件。 如果要添加物理图像,则该图像必须使用base 64编码并分配了Content-ID(cid)。如