有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Docx4j更新表格列表/图表列表

我正在更新一个表格列表,一个数字列表。我在网上看到了一个解决方案,你可以创建一个宏,然后插入它:


package org.docx4j.samples;

import javax.xml.bind.JAXBContext;
import org.docx4j.openpackaging.io.SaveToZipFile;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;

public class MacroEnable {
   
   public static JAXBContext context = org.docx4j.jaxb.Context.jc;

   /**
    * @param args
    */
   public static void main(String[] args) throws Exception {

      String inputfilepath = "/home/dev/workspace/docx4all/sample-docs/earth.docx";      
      String outputfilepath = "/home/dev/docm.docm";      
            
      // Open a document from the file system
      // 1. Load the Package
      WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(inputfilepath));
      
      MainDocumentPart wordDocumentPart = wordMLPackage.getMainDocumentPart();
      
      // Get vbaProject.bin, and attach it to wordDocumentPart
      java.io.InputStream is = new java.io.FileInputStream("/home/dev/vbaProject.bin" );            
      org.docx4j.openpackaging.parts.WordprocessingML.VbaProjectBinaryPart vbaProject
         = new org.docx4j.openpackaging.parts.WordprocessingML.VbaProjectBinaryPart();
      vbaProject.setBinaryData(is);
      wordDocumentPart.addTargetPart(vbaProject);
      
      // Get /word/vbaData.xml, and attach it to vbaProject
      org.docx4j.openpackaging.parts.WordprocessingML.VbaDataPart vbaData
         = new org.docx4j.openpackaging.parts.WordprocessingML.VbaDataPart(); 
      java.io.InputStream is2 = new java.io.FileInputStream("/home/dev/vbaData.xml" );
      vbaData.setDocument( is2 );
      
      vbaProject.addTargetPart( vbaData);
         
      // Change the Word document's content type!
      wordDocumentPart.setContentType( new org.docx4j.openpackaging.contenttype.ContentType(
            org.docx4j.openpackaging.contenttype.ContentTypes.WORDPROCESSINGML_DOCUMENT_MACROENABLED ) );
      // .. but that's a dumb setter right now :(
      // it doesn't actually make the change in ContentTypeManager.  So do that:
      org.docx4j.openpackaging.contenttype.ContentTypeManager ctm
         = wordMLPackage.getContentTypeManager();
      org.docx4j.openpackaging.parts.PartName partName
         = wordDocumentPart.getPartName();
      
      ctm.removeContentType( partName  );
      ctm.addOverrideContentType( new java.net.URI("/word/document.xml"),
            org.docx4j.openpackaging.contenttype.ContentTypes.WORDPROCESSINGML_DOCUMENT_MACROENABLED);
   
            
      // Save it      
      SaveToZipFile saver = new SaveToZipFile(wordMLPackage);
      saver.save(outputfilepath);
   }
   

}

它可能已经过时,因为功能:

      vbaData.setDocument( is2 );

根本不存在。有人知道如何解决更新表格列表/人物列表的问题,或者如何正确上传宏吗


共 (0) 个答案