使用jacob将excel文件另存为

本文介绍了如何通过Java程序及jacob库实现将非标准Excel文件进行另存为操作,包括初始化COM组件、打开Excel程序、读取文件并执行另存为命令等步骤。特别关注了在将Jar包内的Java程序应用于实际场景时可能出现的文件路径错误,并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的文件夹




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值