我现在的情况是要从数据库取出数据,塞到word对应的表格中,因为word是事先做的模版,研究了半天poi,还是不明白,有哪位大侠对操作poi熟悉的,或对操作word熟的人想想办法等待中

解决方案 »

  1.   

    貌似需要用poi把word模版也写出来
    然后在相应的表格里留出位置方便填写数据
      

  2.   

    有什么具体的方法,或者api什么的。
      

  3.   

    不好意思
    具体的不清楚
    但我觉得poi可以做到
      

  4.   

    恩,我看了一段poi的api了,什么hdf,hpsf,还有hwpf,但是没找到具体操作方法。。郁闷中。。我这个模版有点变态,以前是手工写,现在又系统了,就把手工代替了,再研究研究吧
      

  5.   

    package com.sea.iframe.seaman;import java.io.File;
    import java.util.ArrayList;import javax.swing.JOptionPane;import office.MSWordManager;import com.sea.dao.cert.CertDao;
    import com.sea.dao.download.DownLoad;
    import com.sea.dao.download.DownloadServices;
    import com.sea.dao.health.HealthDao;
    import com.sea.dao.seaman.SeamanDao;
    import com.sea.dao.server.ServerDao;
    import com.sea.dao.ship.ShipDao;
    import com.sea.iframe.others.SeamanLogger;
    import com.sea.model.cert.Cert;
    import com.sea.model.health.Health;
    import com.sea.model.seaman.Seaman;
    import com.sea.model.server.Server;
    import com.sea.model.ship.Ship;
    import com.sea.services.user.SeaSystemServices;
    import com.sea.util.Tool;
    public class SeamanToWord {

    private int seid=-1;
    private Seaman seaman;
    private Cert cert;
    private MSWordManager wordManager = new MSWordManager(false);
    private ArrayList<Server> list;
    private String save_path; 
    boolean isHealth = false;
    boolean isShoushu = false;
    String healthDiscribe = "";


    public SeamanToWord(int seid){
    this.seid = seid;
    } private void getSeaman(){
    SeamanDao seamanDao = new SeamanDao();
    seaman = seamanDao.getSeamanByID(seid);
    }

    private void getCert(String certname){
    CertDao certDao = new CertDao();
    cert = certDao.getCertByID(seid, certname);
    }

    private void getServerList(){
    ServerDao serverDao = new ServerDao();
    list = serverDao.getServerBySeid(seid);
    }

    private void getHealth(){
    HealthDao healthDao = new HealthDao();
    ArrayList<Health> list = healthDao.getHealthListBySeid(seid);

    if(list.size()!=0)
    isHealth = true;

    for(int i=0; i<list.size(); i++){
    Health health = list.get(i);
    if(("是").equals(health.getShoushu())){
    isShoushu = true;
    break;
    }
    }

    for(int i=0; i<list.size(); i++){
    Health health = list.get(i);
    healthDiscribe += "在"+health.getStartdate()+"到"+health.getEnddate()+"期间"+"患"+health.getIllname();
    if(health.getShoushu().equals("是"))
    healthDiscribe += ",动过手术";
    if(health.getLichuan().equals("是"))
    healthDiscribe += ",还因病离船";
    healthDiscribe += "\n";
    }
    }

    private String getPath(){
    String save_path = new SeaSystemServices().getSeaSystemByName(Tool.CERT_SAVE_PATH).getDataValue();
    save_path = save_path.replaceAll("/", "//");
    // save_path = save_path+"//doc";
    if(("").equals(save_path)||null==save_path){
    String path = this.getClass().getResource("").toString();
    path = path.substring(path.indexOf("/")+1);
    path = path.substring(0,path.indexOf("/"));
    // save_path = path+"//doc";
    }
    save_path = save_path.replaceAll("//", "\\\\");
    File file = new File(save_path);
    if(!file.exists())
    file.mkdirs();
    return save_path;
    }

    private void generateWord() throws Exception{
    this.getSeaman();
    //System.out.println("Tool>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+Tool.WORDPATH);
    String modelPath = this.getClassPath()+Tool.WORDPATH;
    //System.out.println("modelPath>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+modelPath);
    modelPath = modelPath.replaceAll("/", "\\\\");
    wordManager.openDocument(modelPath);
    if(seaman!=null){
    wordManager.moveStart();
    wordManager.replaceAllText("cyname", seaman.getIname());
    wordManager.moveStart();
    wordManager.replaceAllText("cyjob", Tool.changFlagToValue(seaman.getJob(), "A"));
    wordManager.moveStart();
    wordManager.replaceAllText("cybirthday", seaman.getBday());
    wordManager.moveStart();
    wordManager.replaceAllText("cyaddress", seaman.getAddress());
    wordManager.moveStart();
    wordManager.replaceAllText("cymarray", seaman.getMarry());
    wordManager.moveStart();
    wordManager.replaceAllText("cyeducation", Tool.changFlagToValue(seaman.getJob(), "C"));
    wordManager.moveStart();
    wordManager.replaceAllText("cyschool", seaman.getSchool());
    wordManager.moveStart();
    wordManager.replaceAllText("cyenglishlevel", seaman.getForeign_level());

    if(!("-1").equals(seaman.getCerturl())){
    String pictureUrl = getClassPath();
    try {
    DownLoad downLoad = new DownloadServices().queryDownload(seaman
    .getCerturl());
    if (downLoad != null)
    pictureUrl += downLoad.saveFile("download/seamanmodel/doc/");
    } catch (Exception e1) {
    e1.printStackTrace();
    SeamanLogger.getLogger().debug(e1.toString());
    }
    pictureUrl = pictureUrl.replaceAll("/", "\\\\");
    File file = new File(pictureUrl);
    if(file.exists()){
    wordManager.moveStart();
    wordManager.replaceAllImage("cyphotoshop", pictureUrl);
    file.delete();
    }
    }
    }

    this.getCert(Tool.CERT_HYZ);
    if(cert!=null){
    wordManager.moveStart();
    wordManager.replaceAllText("cycertname", cert.getCertnumber());
    wordManager.moveStart();
    wordManager.replaceAllText("cystartdate", cert.getStartdate());
    wordManager.moveStart();
    wordManager.replaceAllText("cyenddate", cert.getEnddate());
    }else{
    wordManager.moveStart();
    wordManager.replaceAllText("cycertname", "");
    wordManager.moveStart();
    wordManager.replaceAllText("cystartdate", "");
    wordManager.moveStart();
    wordManager.replaceAllText("cyenddate", "");
    }

    this.getCert(Tool.CERT_SFZ);
    if(cert!=null){
    wordManager.moveStart();
    wordManager.replaceAllText("cysfz", cert.getCertnumber());
    }else{
    wordManager.moveStart();
    wordManager.replaceAllText("cysfz", "");
    }

    this.getCert(Tool.CERT_FWB);
    if(cert!=null){
    wordManager.moveStart();
    wordManager.replaceAllText("cyfwb", cert.getCertnumber());
    }else{
    wordManager.moveStart();
    wordManager.replaceAllText("cyfwb", "");
    }

    this.getHealth();
    if(isHealth){
    wordManager.moveStart();
    wordManager.replaceAllText("cyishealth", "有");
    }else{
    wordManager.moveStart();
    wordManager.replaceAllText("cyishealth", "无");
    }

    if(isShoushu){
    wordManager.moveStart();
    wordManager.replaceAllText("cyisshoushu", "有");
    }else{
    wordManager.moveStart();
    wordManager.replaceAllText("cyisshoushu", "无");
    }

    wordManager.moveStart();
    wordManager.replaceAllText("cyhealth", healthDiscribe);

    this.getServerList();
    if(list!=null){
    for(int i=0; i<list.size()&&i<3; i++){
    Server server = list.get(i);
    if(Tool.daysOfTwo(Tool.getDate(), server.getOutshipdate())<1095){
    Ship ship = new ShipDao().getShipByID(server.getShipid());
    wordManager.moveStart();
    wordManager.replaceAllText("cyshipname"+(i+1), ship==null?"":ship.getShipName());
    wordManager.moveStart();
    wordManager.replaceAllText("cytongwei"+(i+1), ship==null?"":(ship.getDeadWeight()+"/"+ship.getPower()));
    wordManager.moveStart();
    wordManager.replaceAllText("jobname"+(i+1), Tool.changFlagToValue(server.getJobname(), "A"));
    wordManager.moveStart();
    wordManager.replaceAllText("cyupdowndate"+(i+1), server.getOnshipdate()+"/"+server.getOnshipdate());
    wordManager.moveStart();
    wordManager.replaceAllText("cyre"+(i+1), server.getLichuanre());
    }
    }
    }
    save_path = this.getPath()+"//"+seaman.getIname()+Tool.getLongDate()+".doc";
    wordManager.saveFileAs(save_path);
    wordManager.setSaveOnExit(false);
    wordManager.closeDocument();
    wordManager.closeWord();
    }

    public boolean generateWordProxy(){
    boolean isSuccess = false;
    try {
    generateWord();
    isSuccess = true;
    } catch (Exception e) {
    isSuccess = false;
    wordManager.closeDocument();
    wordManager.closeWord();
    }
    return isSuccess;
    }

    private String getClassPath(){
    File file = new File("");
    String path = file.getAbsolutePath();
    path = path.replaceAll("\\\\", "/");
    return path+"/";
    }

    public static void main(String[] args){
    // SeamanToWord seamanToWord = new SeamanToWord(101);
    // System.out.println(seamanToWord.getClassPath());
    }
    }
      

  6.   

    package office;import com.jacob.activeX.ActiveXComponent; 
    import com.jacob.com.Dispatch; 
    import com.jacob.com.Variant;public class MSWordManager { 
            // word文档 
            private Dispatch doc;        // word运行程序对象 
            private ActiveXComponent word;        // 所有word文档集合 
            private Dispatch documents;        // 选定的范围或插入点 
            private Dispatch selection;        private boolean saveOnExit = true;        /**
             *     
             * @param visible 为true表示word应用程序可见 
             */ 
            public MSWordManager(boolean visible) { 
                    if (word == null) { 
                            word = new ActiveXComponent("Word.Application"); 
                            word.setProperty("Visible", new Variant(visible)); 
                    } 
                    if (documents == null) 
                            documents = word.getProperty("Documents").toDispatch(); 
            }        /**
             * 设置退出时参数 
             *     
             * @param saveOnExit boolean true-退出时保存文件,false-退出时不保存文件 
             */ 
            public void setSaveOnExit(boolean saveOnExit) { 
                    this.saveOnExit = saveOnExit; 
            }        /**
             * 创建一个新的word文档 
             *     
             */ 
            public void createNewDocument() { 
                    doc = Dispatch.call(documents, "Add").toDispatch(); 
                    selection = Dispatch.get(word, "Selection").toDispatch(); 
            }        /** 
             * 打开一个已存在的文档 
             *     
             * @param docPath 
             */ 
            public void openDocument(String docPath) { 
                    //closeDocument(); 
                    doc = Dispatch.call(documents, "Open", docPath).toDispatch(); 
                    selection = Dispatch.get(word, "Selection").toDispatch(); 
            }        /**
             * 把选定的内容或插入点向上移动 
             *     
             * @param pos 移动的距离 
             */ 
            public void moveUp(int pos) { 
                    if (selection == null) 
                            selection = Dispatch.get(word, "Selection").toDispatch(); 
                    for (int i = 0; i < pos; i++) 
                            Dispatch.call(selection, "MoveUp");        }        /**
             * 把选定的内容或者插入点向下移动 
             *     
             * @param pos 移动的距离 
             */ 
            public void moveDown(int pos) { 
                    if (selection == null) 
                            selection = Dispatch.get(word, "Selection").toDispatch(); 
                    for (int i = 0; i <pos; i++) 
                            Dispatch.call(selection, "MoveDown"); 
            }        /**
             * 把选定的内容或者插入点向左移动 
             *     
             * @param pos 移动的距离 
             */ 
            public void moveLeft(int pos) { 
                    if (selection == null) 
                            selection = Dispatch.get(word, "Selection").toDispatch(); 
                    for (int i = 0; i <pos; i++) { 
                            Dispatch.call(selection, "MoveLeft"); 
                    } 
            }        /**
             * 把选定的内容或者插入点向右移动 
             *     
             * @param pos 移动的距离 
             */ 
            public void moveRight(int pos) { 
                    if (selection == null) 
                            selection = Dispatch.get(word, "Selection").toDispatch(); 
                    for (int i = 0; i < pos; i++) 
                            Dispatch.call(selection, "MoveRight"); 
            }        /**
             * 把插入点移动到文件首位置 
             *     
             */ 
            public void moveStart() { 
                    if (selection == null) 
                            selection = Dispatch.get(word, "Selection").toDispatch(); 
                    Dispatch.call(selection, "HomeKey", new Variant(6)); 
            } 
             
            public void moveEnd() { 
                    if (selection == null) 
                            selection = Dispatch.get(word, "Selection").toDispatch(); 
                    Dispatch.call(selection, "EndKey", new Variant(6)); 
            }        /**
             * 从选定内容或插入点开始查找文本 
             *     
             * @param toFindText 要查找的文本 
             * @return boolean true-查找到并选中该文本,false-未查找到文本 
             */ 
            public boolean find(String toFindText) { 
                    if (toFindText == null || toFindText.equals("")) 
                            return false; 
                    // 从selection所在位置开始查询 
                    Dispatch find = word.call(selection, "Find").toDispatch(); 
                    // 设置要查找的内容 
                    Dispatch.put(find, "Text", toFindText); 
                    // 向前查找 
                    Dispatch.put(find, "Forward", "True"); 
                    // 设置格式 
                    //Dispatch.put(find, "Format", "True"); 
                    // 大小写匹配 
                    //Dispatch.put(find, "MatchCase", "True"); 
                    // 全字匹配 
                    //Dispatch.put(find, "MatchWholeWord", "True"); 
                    // 查找并选中 
                    return Dispatch.call(find, "Execute").getBoolean(); 
            }        /**
             * 把选定内容设定为替换文本 
             *     
             * @param toFindText 查找字符串 
             * @param newText 要替换的内容 
             * @return 
             */ 
            public boolean replaceText(String toFindText, String newText) { 
                    if (!find(toFindText)) 
                            return false; 
                    Dispatch.put(selection, "Text", newText); 
                    return true; 
            }