一、jacob使用前准备
1、jacob官网下载jacob(下载之后具体的使用请自行百度,网上很多关于jacob使用的文章)
2、安装office(jacob实现格式转换的本质是调用office另存为,本文是基于office 2010)
二、excel格式互转
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import java.io.File;
public class test{
/***jacob操作office内部对应代码 */
/*** xlsx 格式 */
private static final int XLSX_FMT = 51;
/*** xls 格式 */
private static final int XLS_FMT = 1;
/**
* 根据格式类型转换 Excel 文件
*
* @param srcPath 源文件
* @param descPath 目标文件
* @param fmt 所转格式
*/
private static File converteExcelfmt(String srcPath, String descPath, int fmt) throws Exception {
// 实例化ComThread线程与ActiveXComponent
ComThread.InitSTA();
ActiveXComponent wordApp = new ActiveXComponent("Excel.Application");
try {
// 文件隐藏时进行应用操作
wordApp.setProperty("Visible", new Variant(false));
// 实例化模板Workbooks对象
Dispatch workbooks = wordApp.getProperty("Workbooks").toDispatch();
// 打开Workbooks进行另存为操作
Dispatch doc = Dispatch.invoke(workbooks, "Open", Dispatch.Method, new Object[]{srcPath, new Variant(true), new Variant(true)}, new int[1]).toDispatch();
Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[]{descPath, new Variant(fmt)}, new int[1]);
Dispatch.call(doc, "Close", new Variant(false));
return new File(descPath);
} catch (Exception e) {
throw e;
} finally {
// 释放线程与ActiveXComponent
wordApp.invoke("Quit", new Variant[]{});
ComThread.Release();
}
}
public static void main(String[] args) throws Exception {
String str1="C:\\test.xls";
String str2="C:\\testxxx.xlsx";
String str3="C:\\testx.xls";
//xls文件转xlsx文件
converteExcelfmt(str1,str2,XLSX_FMT);
//xlsx文件转xls文件
converteExcelfmt(str2,str3,XLS_FMT);
}
}