zoukankan      html  css  js  c++  java
  • Java利用jacob实现打印Excel文件

    package com.HeiBeiEDU.test2;
    
    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 PrintDemo {
    
        public static boolean printOfficeFile(File f) {
            if (f != null && f.exists()) {
                String fileNameString = f.getName();
                String postfixString = Utils.getPostfix(fileNameString);
                if (postfixString.equalsIgnoreCase("xls") || postfixString.equalsIgnoreCase("xlsx")) {
                    /**
                     * 功能:实现excel打印工作
                     */
                    ComThread.InitSTA();
                    ActiveXComponent xl = new ActiveXComponent("Excel.Application");
                    try {
                        // System.out.println("version=" +
                        // xl.getProperty("Version"));
                        // 不打开文档
                        Dispatch.put(xl, "Visible", new Variant(false));
                        Dispatch workbooks = xl.getProperty("Workbooks").toDispatch();
                        // 打开文档
                        Dispatch excel = Dispatch.call(workbooks, "Open", f.getAbsolutePath()).toDispatch();
                        // 横向打印(2013/05/24)
                        // Dispatch currentSheet = Dispatch.get(excel,
                        // "ActiveSheet")
                        // .toDispatch();
                        // Dispatch pageSetup = Dispatch
                        // .get(currentSheet, "PageSetup").toDispatch();
                        // Dispatch.put(pageSetup, "Orientation", new Variant(2));
                        // 每张表都横向打印2013-10-31
                        Dispatch sheets = Dispatch.get((Dispatch) excel, "Sheets").toDispatch();
                        // 获得几个sheet
                        int count = Dispatch.get(sheets, "Count").getInt();
                        // System.out.println(count);
                        for (int j = 1; j <= count; j++) {
                            Dispatch sheet = Dispatch
                                    .invoke(sheets, "Item", Dispatch.Get, new Object[] { new Integer(j) }, new int[1])
                                    .toDispatch();
                            Dispatch pageSetup = Dispatch.get(sheet, "PageSetup").toDispatch();
                            Dispatch.put(pageSetup, "Orientation", new Variant(2));
                            Dispatch.call(sheet, "PrintOut");
                        }
                        // 开始打印
                        if (excel != null) {
                            // Dispatch.call(excel, "PrintOut");
                            // 增加以下三行代码解决文件无法删除bug
                            Dispatch.call(excel, "save");
                            Dispatch.call(excel, "Close", new Variant(true));
                            excel = null;
                        }
                        xl.invoke("Quit", new Variant[] {});
                        xl = null;
                        return true;
                    } catch (Exception e) {
                        e.printStackTrace();
                        return false;
                    } finally {
                        // 始终释放资源
                        ComThread.Release();
                    }
                } else if (postfixString.equalsIgnoreCase("doc") || postfixString.equalsIgnoreCase("docx")) {
                    ComThread.InitSTA();
                    ActiveXComponent wd = new ActiveXComponent("Word.Application");
                    try {
                        // 不打开文档
                        Dispatch.put(wd, "Visible", new Variant(false));
                        Dispatch document = wd.getProperty("Documents").toDispatch();
                        // 打开文档
                        Dispatch doc = Dispatch
                                .invoke(document, "Open", Dispatch.Method, new Object[] { f.getAbsolutePath() }, new int[1])
                                .toDispatch();
                        // 开始打印
                        if (doc != null) {
                            Dispatch.call(doc, "PrintOut");
                            // 增加以下三行代码解决文件无法删除bug
                            Dispatch.call(doc, "save");
                            Dispatch.call(doc, "Close", new Variant(true));
                            doc = null;
                        }
                        wd.invoke("Quit", new Variant[] {});
                        wd = null;
                        return true;
                    } catch (Exception e) {
                        e.printStackTrace();
                        return false;
                    } finally {
                        // 始终释放资源
                        ComThread.Release();
                    }
                } else {
                    return false;
                }
            } else {
                return false;
            }
        }
        public static void main(String[] args) {
            PrintDemo.printOfficeFile(new File("hehe.xls"));
        }
    }
  • 相关阅读:
    斐波那契额数列
    Handler+Looper+MessageQueue深入详解
    Android中常见的设计模式
    Java的序列化与反序列化
    Fragment的生命周期(与Activity的对比)
    两步搞定Activity的向右滑动返回的功能
    BOM和DOM的联系和区别
    JavaScript 之 使用 XMLHttpRequest 预览文件(图片)
    JavaScript 之 使用 XMLHttpRequest 上传文件
    JavaScript 客户端JavaScript之脚本化HTTP(通过XMLHttpRequest)
  • 原文地址:https://www.cnblogs.com/vczh/p/5692527.html
Copyright © 2011-2022 走看看