您可以嘗試在你的將通話指定的文件格式。
如果幸運的話,您可以在Excel幫助中找到所需的文件格式代碼。如果你在那裏找不到你需要的東西,那麼你必須用OLEVIEW.EXE程序弄髒你的手。在某處可能會有一份拷貝放在您的硬盤上,但如果沒有,很容易就可以通過快速Google搜索找到一份拷貝。
要使用OLEView.exe這類:
- 運行它
- 裂縫打開 '類型庫' 條目
- 找到您使用的是
- 打開該項目的Excel版本
- 搜索顯示爲字符串'XlFileFormat'的大量文本
- Examin E中的XLFileFormat枚舉的代碼,看來如果您正在使用的Office2007( 「Excel12」)像我,你可以嘗試這些值中的一個有前途的
:
- xlOpenXMLWorkbookMacroEnabled = 52
- xlOpenXMLTemplateMacroEnabled = 53
下面是我用它來保存Excel文件的方法使用OLE:
/**
* Save the given workbook in the specified format.
*
* @param controlSiteAuto the OLE control site to use
* @param filepath the file to save to
* @param formatCode XlFileFormat code representing the file format to save as
* @param replaceExistingWithoutPrompt true to replace an existing file quietly, false to ask the user first
*/
public void saveWorkbook(OleAutomation controlSiteAuto, String filepath, Integer formatCode, boolean replaceExistingWithoutPrompt) {
Variant[] args = null;
Variant result = null;
try {
// suppress "replace existing?" prompt, if necessary
if (replaceExistingWithoutPrompt) {
setPropertyOnObject(controlSiteAuto, "Application", "DisplayAlerts", "False");
}
// if the given formatCode is null, for some reason, use a reasonable default
if (formatCode == null) {
formatCode = 51; // xlWorkbookDefault=51
}
// save the workbook
int[] id = controlSiteAuto.getIDsOfNames(new String[] {"SaveAs", "FileName", "FileFormat"});
args = new Variant[2];
args[0] = new Variant(filepath);
args[1] = new Variant(formatCode);
result = controlSiteAuto.invoke(id[0], args);
if (result == null || !result.getBoolean()) {
throw new RuntimeException("Unable to save active workbook");
}
// enable alerts again, if necessary
if (replaceExistingWithoutPrompt) {
setPropertyOnObject(controlSiteAuto, "Application", "DisplayAlerts", "True");
}
} finally {
cleanup(args);
cleanup(result);
}
}
protected void cleanup(Variant[] variants) {
if (variants != null) {
for (int i = 0; i < variants.length; i++) {
if (variants[i] != null) {
variants[i].dispose();
}
}
}
}
我試試這個解決方案,但結果是一個空的Excel文件。 – ChHaupt
沒有任何Excel工作表。我使用Excel 2010並嘗試formatCode 52和53. – ChHaupt
我沒有Excel 2010,但有一點谷歌搜索導致我相信代碼沒有從Excel 2007中更改過。不可能在Excel工作簿中沒有工作表它。我看到的一件事是,通過這種OLE機制創建的工作簿有時會在Excel應用程序框架內出現奇怪的「窗口位置」(它們「不在視圖中」)。嘗試打開您生成的工作簿,然後選擇View-> Arrange All-> Cascade,並查看是否「將工作簿拉入視圖中。」 – stracka