簡體   English   中英

如何使用Java以編程方式將宏添加到Excel電子表格

[英]How do I add a Macro programmatically to an Excel spreadsheet with Java

我使用Apache-Poi以編程方式創建Excel電子表格,但是它不支持添加宏。

有沒有一種方法可以使用Java將宏添加到電子表格中。 我很樂意在Excel中手動創建宏,如果可以導出它,然后以編程方式將其導入/添加到新電子表格中,但不知道是否有這樣做的方法。

我認為這還不可用。 最好的解決方案是手動創建一個空的工作簿,並在其中手動編碼您的宏,然后將該工作簿另存為模板。 然后,只要以后需要此宏用於將來的工作簿,只需使用此現有工作簿而不是啟動草稿工作簿,您就會發現您的宏也已在此工作簿中附加並啟用。 希望這是有道理的!

好吧,我還沒有嘗試過(盡管嘗試過類似的事情,但取得了一些成功)。 但是您可以嘗試一下:查看xlsm文檔中的workbook.xml.rels文件,您可以找到以下內容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
    <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>
    <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/>
    <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>
    <Relationship Id="rId4" Type="http://schemas.microsoft.com/office/2006/relationships/vbaProject" Target="vbaProject.bin"/>
</Relationships>

注意最后一個關系:這是宏文件( vbaProject ),因此,您可以提取關系包並編輯此特定的XML,並添加一個新的關系,例如最后一個。 然后,您必須將Macro二進制文件打包到styles.xmlworkbook.xml所在的xl目錄中。 我認為可以做到。

對於第一部分,盡管您在Apache POI中擁有諸如document.getRelations()RelationPart.addReation(...)類的方法以及其他類似方法,但在我看來,它們旨在與XML文檔部件一起使用,也就是說宏不是這種情況。 因此,您可以僅使用Java ZipInputStream和ZipEntry util庫,提取名為workbook.xml.rels的XML文件,並構建如下的XML文檔:

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
org.w3c.dom.Document xmlDoc = documentBuilder.parse(WORKBOOK.XML.RELS_INPUT_STREAM);
//INSERT HERE SOME LOGIC TO ADD THE DESIRED Relationship NODE

Transformer transformer = TransformerFactory.newInstance().newTransformer();
Result output = new StreamResult(SOME_OUTPUT_STREAM);
Source input = new DOMSource(xmlDoc);
transformer.transform(input, output);

然后再處理Zip文件,以包含您已經從實際的啟用Macro的電子表格中提取的vbaProject.bin文件。

很高興聽到您的成功!

干杯

編輯您可能還想編輯[Content_Types] .xml文件,以包含vbaProject內容類型的bin擴展名(如果尚不存在):

<Default Extension="bin" ContentType="application/vnd.ms-office.vbaProject"/>

我認為就這些。

以編程方式不支持。 一種方法是使用模板文件創建excel。 這可以通過Apache POI或JExcel庫完成。 您可以使用lib打開文檔,進行修改並將其保存為新文件。

Apache POI明確規定了其限制 ,即無法創建宏。

Jexcel 鏈接還使您不能創建宏,但可以從模板進行復制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM