我正在尝试保存已自动修改的工作簿。这是一个例子:
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
我尝试了以下方法,但都没有成功:
有没有办法在不提示的情况下保存工作簿?请注意,上面的代码会打开文件,并计算公式而不会出现任何错误。
由于
答案 0 :(得分:5)
好的,这是解决方案:
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();
}
}