Java中使用Jacob将Excel文件另存为的代码

2019-01-20 04:01 阅读 1,148 次 评论 0 条
package com.cai.read_excel.util;
 
import java.io.File;
 
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
 
public class ExcelSaveAsDemo {
 
	/**
	 * saveAs方法用于excel源文件不是标准源文件时(打开文件软件提示另存为),执行将文件另存为的操作。
	 * 此操作调用jacob-1.18-M2.jar,需要先将jacob包下的jacob-1.18-M2-x64(或x86).dll复制到Java
	 * jdk的\bin目录下。
	 * 
	 * @param srcFilePath
	 *            源文件
	 * @param destFilePath
	 *            另存为目的地文件
	 */
	public File saveAs(String srcFilePath, String destFilePath) {
		File destFile = null;
		// COM组件初始化
		ComThread.InitSTA();
		// 打开Excel程序
		ActiveXComponent xl = new ActiveXComponent("Excel.Application");
		try {
			// 不显示程序
			Dispatch.put(xl, "Visible", new Variant(false));
			// 打开工作簿
			Dispatch workbooks = xl.getProperty("Workbooks").toDispatch();
			Dispatch workbook = Dispatch.call(workbooks,// 执行命令的对象
					"Open", // 要执行的命令
					srcFilePath,// 要打开的文件
					false,// ConfirmConversions
					true // ReadOnly
					).toDispatch();
			// 另存为(数字18表示保存文件版本是Microsoft Excel 97-2003)
			Dispatch.invoke(
					workbook, 
					"SaveAs", 
					Dispatch.Method, 
					new Object[] {destFilePath, new Variant(18) }, 
					new int[1]);
			Dispatch.call(workbook, "Close", new Variant(false));
			// 返回另存为文件对象
			destFile = new File(destFilePath);
			if (!destFile.exists()) {
				throw new RuntimeException("Excel文件另存为失败");
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException("Excel文件另存为时发生异常", e);
		} finally {
			xl.invoke("Quit", new Variant[] {});
			ComThread.Release();
		}
		return destFile;
	}
 
}

可能会遇到的问题:

如果有一个Java程序是打成jar包,并且jar包里的程序,有调用以上的方法进行excel另存为操作,有可能出现提示:
com.jacob.com.ComFailException: Invoke of: OpenSource: Microsoft Office ExcelDescription: Microsoft Office Excel</p><p>
• 文件名称或路径不存在。
• 文件正被其他程序使用。
• 您正要保存的工作簿与当前打开的工作簿同名。

解决:
如果系统是64位:
请在C:\Windows\SysWOW64\config\systemprofile\目录下新建一个Desktop的文件夹
如果系统是32位:
请在C:\Windows\System32\config\systemprofile\目录下新建一个Desktop的文件夹

转载自:https://blog.csdn.net/caibaohong/article/details/40409845

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:Java中使用Jacob将Excel文件另存为的代码 | 雨晨博客
分类:JAVA, 程序笔记 标签:, ,

发表评论


表情