如何使用com4j API保存excel工作簿而不被提示

我正在尝试保存已被自动修改的工作簿。 这里是一个例子:

import excel.*; import com4j.Variant; import static com4j.Variant.MISSING; public class ExcelDemo { public static void main(String[] args) { _Application app = excel.ClassFactory.createApplication(); app.visible(0,false); //Variant readOnly = new Variant(Variant.Type.VT_BOOL); //readOnly.set(0); //Variant ignoreReadOnly = new Variant(Variant.Type.VT_BOOL); //ignoreReadOnly.set(1); //Variant saveBeforeExit = new Variant(Variant.Type.VT_BOOL); //saveBeforeExit.set(1); app.workbooks().open( "C:/dev/test.xlsx", MISSING, MISSING, MISSING, MISSING, MISSING, MISSING, MISSING, MISSING, MISSING, MISSING, MISSING, MISSING, MISSING, MISSING, 0); app.calculate(0); app.save(MISSING,0); app.workbooks().close(0); //app.workbooks().close(saveBeforeExit,MISSING,MISSING); } 

}

上面的代码是从一个ant文件运行并产生以下错误:

 run: [java] Exception in thread "main" com4j.ComException: 800a03ec (Unknown error) : The file could not be accessed. Try one of the following: [java] [java] ò Make sure the specified folder exists. [java] ò Make sure the folder that contains the file is not read-only. [java] ò Make sure the file name does not contain any of the following characters: < > ? [ ] : | or * [java] ò Make sure the file/path name doesn't contain more than 218 characters. : .\invoke.cpp:460 [java] at com4j.Wrapper.invoke(Wrapper.java:122) [java] at $Proxy5.save(Unknown Source) [java] at ExcelDemo.main(ExcelDemo.java:36) [java] Caused by: com4j.ComException: 800a03ec (Unknown error) : The file could not be accessed. Try one of the following: [java] [java] ò Make sure the specified folder exists. [java] ò Make sure the folder that contains the file is not read-only. [java] ò Make sure the file name does not contain any of the following characters: < > ? [ ] : | or * [java] ò Make sure the file/path name doesn't contain more than 218 characters. : .\invoke.cpp:460 [java] at com4j.Native.invoke(Native Method) [java] at com4j.StandardComMethod.invoke(StandardComMethod.java:95) [java] at com4j.Wrapper$InvocationThunk.call(Wrapper.java:258) [java] at com4j.Task.invoke(Task.java:44) [java] at com4j.ComThread.run0(ComThread.java:149) [java] at com4j.ComThread.run(ComThread.java:125) [java] Java Result: 1 

我尝试了以下的东西,但都没有成功:

  1. 将readOnly参数设置为false
  2. 将ignoreReadOnly参数设置为true
  3. 做1和2
  4. 将saveBeforeExit对象传递给save方法

有没有办法保存工作簿而不被提示? 请注意,上面的代码不会打开文件,并计算公式没有任何错误。

谢谢

好的这里的解决scheme:

 import excel.*; import com4j.Variant; import static com4j.Variant.MISSING; public class ExcelDemo { public static void main(String[] args) { _Application app = excel.ClassFactory.createApplication(); app.visible(0,false); Variant saveBeforeExit = new Variant(Variant.Type.VT_BOOL); saveBeforeExit.set(1); _Workbook wb = app.workbooks().open( "C:/dev/test.xlsx", MISSING, //0 MISSING, //false MISSING, //5 MISSING, //"" MISSING, //"" MISSING, //true MISSING, //true MISSING, //obj MISSING, //false MISSING, //false MISSING, //obj MISSING, MISSING, MISSING, 0); app.calculate(0); wb.close(saveBeforeExit, MISSING,MISSING, 0); app.quit(); } 

}

Interesting Posts