项目开发中遇到过通过java生成多个excel,然后再合并为一个统一excel的需求。
在合并过程中,如果某个excel存在异常,就会报错,因此需要判断一下生成的excel能否正常打开。这些处理需要在后台进行,用户在使用过程中是感觉不到的,因此不能直接通过cmd命令去打excel,可以通过如下代码判断。

// 检查生成的Excel是否可以正常打开
// excelPath为需要检查的excel路径CheckExcelStatus checkExcel = new CheckExcelStatus();// Excel可以正常打开时关闭Excelif(checkExcel .openExcelFile(excelPath)){checkExcel .closeExcelFile(false);}else{// 无法正常打开时报错outputFlg = false;MessageBox.post("生成的excel文档无法正常打开,请确认。" , "错误", MessageBox.ERROR);}public class CheckExcelStatus{public ActiveXComponent activexcomponent;public Dispatch workbooks = null;public Dispatch workbook = null;public Dispatch sheet = null;public Vector< String > oldSheetName = new Vector< String >();private HashMap<String,String> fileType=new HashMap<String,String>();{fileType.put("txt", "icons/txticon.exe");fileType.put("doc", "icons/wordicon.exe");fileType.put("xls", "icons/excelicon.exe");fileType.put("pdf", "icons/pdficon.ico");}private Vector<String> imageType=new Vector<String>();{imageType.add("bmp");imageType.add("jpg");imageType.add("jpeg");imageType.add("gif");}/*** @param args*/public static void main(String[] args) {JacobCheckExcel jacobexcel=new JacobCheckExcel();System.out.println( jacobexcel.getExcelApplicationVersion() );}public void saveAsExcelFile(String fileName) {try {Dispatch.call(sheet, "Select");File f = new File(fileName);f.delete();Dispatch.invoke(workbook, "SaveAs", Dispatch.Method,new Object[] { fileName }, new int[1]);} catch (Exception e) {System.out.println("另存为时出错...");e.printStackTrace();}}public void closeExcelFile(boolean close) {try {Dispatch.call((Dispatch) workbook, "Save");Dispatch.call((Dispatch) workbook, "Close", new Variant(close));} catch (Exception e) {System.out.println("保存关闭时出错...");e.printStackTrace();} finally {activexcomponent.invoke("Quit", new Variant[] {});}}public void openExcelFile(String filename,String sheetName){try {activexcomponent = new ActiveXComponent("Excel.Application");activexcomponent.setProperty("Visible", new Variant(false));workbooks = activexcomponent.getProperty("Workbooks").toDispatch();workbook = Dispatch.invoke(workbooks,"Open",Dispatch.Method,new Object[] { filename, new Variant(false), new Variant(false)},// 是否以只读方式打开new int[1]).toDispatch();Dispatch sheets = Dispatch.get((Dispatch) workbook,"Sheets").toDispatch();sheet = Dispatch.invoke(sheets, "Item", Dispatch.Get,new Variant[] { new Variant(sheetName) },new int[1]).toDispatch();//激活sheet工作表Dispatch.call(sheet, "Activate");} catch (Exception e) {System.out.println("打开EXCEL时出错...");e.printStackTrace();}}// 根据路径打开excel文档public boolean openExcelFile(String filename){boolean openExcelFlg = true;try {activexcomponent = new ActiveXComponent("Excel.Application");activexcomponent.setProperty("Visible", new Variant(false)); // 在后台打开workbooks = activexcomponent.getProperty("Workbooks").toDispatch();workbook = Dispatch.invoke(workbooks,"Open",Dispatch.Method,new Object[] { filename, new Variant(false), new Variant(false)},// 是否以只读方式打开new int[1]).toDispatch();Dispatch sheets = Dispatch.get((Dispatch) workbook,"Sheets").toDispatch();int sheetCnt = Dispatch.get(  sheets , "Count").toInt();for(int i = 0; i < sheetCnt; i  ++ ){int SheetIdx = i +1;Dispatch tmpsheet = Dispatch.invoke( sheets , "Item" , Dispatch.Get , new Object[]{SheetIdx} , new int[1] ).toDispatch();if( tmpsheet != null ){oldSheetName.add( new String( Dispatch.get( tmpsheet , "Name" ).toString() ));}}sheet = Dispatch.invoke(sheets, "Item", Dispatch.Get,new Variant[] { new Variant(1) },new int[1]).toDispatch();//激活sheet工作表Dispatch.call(sheet, "Activate");} catch (Exception e) {System.out.println("打开EXCEL时出错...");openExcelFlg = false;e.printStackTrace();}return openExcelFlg;}public String getExcelApplicationVersion(){ActiveXComponent xl = new ActiveXComponent("Excel.Application");String version = new String( xl.getProperty("Version").toString() );System.out.println("version=" + xl.getProperty("Version")); xl.safeRelease();return version;}}

java判断excel能否正常打开相关推荐

  1. Python判断Excel是否处于打开状态的方法

    Python判断Excel是否处于打开状态的方法 原理 Excel在打开的时候,会产生前缀是~$的临时文件.只要判断该临时文件是否存在即可. import osdef check_excel_is_o ...

  2. mfc 如何判断excel软件是否打开_教你windows如何关闭假死窗口,了解自己使用的电脑。...

    在我们使用电脑的时候会经常出现电脑卡机啊不好用啊等等情况,可是自己却不知道电脑为什么会那么慢,如何让电脑快些呢?先来介绍下电脑快慢是怎么回事.在电脑硬件都正常的情况下如果电脑慢会有以下几种情况: 1. ...

  3. Java判断Excel中,空单元格和空行

    1 判断单个单元格为空 //判断单个单元格是否为空 public static boolean isEmptyCell(Cell cell){if(cell==null||cell.getCellTy ...

  4. mfc 如何判断excel软件是否打开_如何从无到有地搭建一套完整的测试系统(上)...

    本文说明讨论了气体传感器的半导体制造商如何采用聚焦于测试的解决方案,该解决方案能够以较低的成本提供所需的准确度,容纳非常大的站点数量,并与高性能半导体测试系统的总体吞吐性能相匹配. 应用背景 MEMS ...

  5. java判断excel格式_Java 设置Excel数据验证

    import com.spire.xls.*;public classDataValidation {public static voidmain(String[] args) {//创建Workbo ...

  6. Java 常用的工具类—判断Excel版本读取Excel/CSV文件

    以下内容均来自实际项目需求,记录下,网上找的读取Excel会出现不少问题,下面代码是经过好多次测试改进的符合现在项目的代码,如有不同要求,请自行修改,代码均只去掉了包名. 注:我们的Excel 第一行 ...

  7. java导出excel无法打开

    如果你在使用 Java 导出 Excel 文件但是打开后出现了无法打开的问题,可能是出现了以下几种情况: 文件损坏:Excel 文件在生成和传输过程中可能已损坏,导致无法打开. 版本问题:生成的 Ex ...

  8. 判断文件是否损坏_判断Excel文件是否已打开

    判断Excel文件是否已打开的示例,可下载源码. 演  示: 示例下载: 在屏幕左下角的 End推荐阅读Access训练营 从0基础开始,循序渐进,系统化的训练营课程,整合作业.课表.社群,为学员提供 ...

  9. java swing 导出文件_java swing (一) 导出excel文件并打开

    点击XXX管理系统中的"导出Excel"按钮,然后弹出如上图,点击"保存"以后,该Excel就保存到指定路径,并且打开. 上述的动作,其实不难,主要是打开该文件 ...

最新文章

  1. 调用API弹出打印机属性对话框
  2. 《3D数学基础》系列视频 1.5 向量的夹角
  3. java源码之HashMap和HashTable的异同
  4. Boost:双图bimap与Boost xpressive的测试程序
  5. 【TensorFlow】优化方法optimizer总结(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)解析(十三)
  6. 如何在weblogic启动时让其加载指定的jar库文件
  7. “啁啾”看完这篇再不懂,放弃吧……
  8. STM32F103:二.(1)点亮LED
  9. 安装指定的vue-router版本
  10. windows编译python扩展Unable to find vcvarsall
  11. 摩尔斯电码(摩斯电码)
  12. 递归算法计算二叉树中叶子结点数目 c语言,编写递归算法,计算二叉树中叶子结点的数目。...
  13. linux pbs提交作业命令,PBS Pro的安装及其作业管理命令
  14. 解决公务车Bug:公安违章管理中编辑新增的公安违章记录,点击保存按钮报:数据库操作异常,null
  15. 六、线性方程组求解--Jacobi和Gauss-Seidel迭代求解
  16. 管道pipe-有名管道
  17. coreldraw凹槽_印刷必备知识.ppt
  18. 《Domain Agnostic Learning with Disentangled Representations》代码
  19. 【Java SE】设计模式
  20. 取一个数的各个数位的数字

热门文章

  1. 腾讯云直播购买和接入基本操作
  2. 孤尽T31项目Day26
  3. 移动云平台的基础架构之旅-云应用篇
  4. Nikto安装和使用
  5. Orange的数据挖掘聚类简单小实验(K-means)
  6. 整理一些好看的loading动画
  7. 计算机二级综合应用代码题多少分,计算机二级题型及分值分布
  8. win11系统下开启管理员权限,更改hosts文件
  9. 映众RTX3050黑金至尊版 评测
  10. 线程 - wait、await 区别