请问各位大虾一个我一直没有搞明白的问题,怎样读word文档中复杂表格(表格套表格)的行和列,怎样读取复杂表格中的内容?谢谢!

解决方案 »

  1.   

    关注,只用过poi,不知道jxl是不是可以实现
      

  2.   

    可以读。应该通过OLE方式读取。具体请参考OLE,SWT等技术。
      

  3.   


    public class COMHelper {
    /**
     * 
     * @param auto
     * @param name
     * @return
     */
    public static Variant getProperty(OleAutomation auto, String name) {
    if (null == auto || StringUtils.isEmpty(name)) {
    return null;
    }
    int[] ids = auto.getIDsOfNames(new String[] { name });
    if (null == ids || ids.length == 0) {
    return null;
    }
    return auto.getProperty(ids[0]);
    } /**
     * 
     * @param auto
     * @param name
     * @param values
     * @return
     */
    public static Variant getProperty(OleAutomation auto, String name,
    Variant[] values) {
    if (null == auto || StringUtils.isEmpty(name) || null == values) {
    return null;
    }
    int[] ids = auto.getIDsOfNames(new String[] { name });
    if (null == ids || ids.length == 0) {
    return null;
    }
    return auto.getProperty(ids[0], values);
    } /**
     * 
     * @param auto
     * @param name
     * @return
     */
    public static Variant invoke(OleAutomation auto, String name) {
    if (null == auto || StringUtils.isEmpty(name)) {
    return null;
    }
    int[] ids = auto.getIDsOfNames(new String[] { name });
    if (null == ids || ids.length == 0) {
    return null;
    }
    return auto.invoke(ids[0]);
    } /**
     * 
     * @param auto
     * @param name
     * @param variants
     * @return
     */
    public static Variant invoke(OleAutomation auto, String name,
    Variant[] variants) {
    if (null == auto || StringUtils.isEmpty(name) || null == variants) {
    return null;
    }
    int[] ids = auto.getIDsOfNames(new String[] { name });
    if (null == ids || ids.length == 0) {
    return null;
    }
    return auto.invoke(ids[0], variants);
    } public static Variant invoke(OleAutomation auto, String name,
    Variant[] variants, int[] dispIds) {
    if (null == auto || StringUtils.isEmpty(name) || null == variants
    || null == dispIds) {
    return null;
    }
    int[] ids = auto.getIDsOfNames(new String[] { name });
    if (null == ids || ids.length == 0) {
    return null;
    }
    return auto.invoke(ids[0], variants, dispIds);
    } /**
     * 
     * @param name
     */
    public static void invokeNoReply(OleAutomation auto, String name) {
    if (null == auto || StringUtils.isEmpty(name)) {
    return;
    }
    int[] ids = auto.getIDsOfNames(new String[] { name });
    if (null == ids || ids.length == 0) {
    return;
    }
    auto.invokeNoReply(ids[0]);
    } /**
     * 
     * @param name
     * @param variants
     */
    public static void invokeNoReply(OleAutomation auto, String name,
    Variant[] variants) {
    if (null == auto || StringUtils.isEmpty(name) || null == variants) {
    return;
    }
    int[] ids = auto.getIDsOfNames(new String[] { name });
    if (null == ids || ids.length == 0) {
    return;
    }
    auto.invokeNoReply(ids[0], variants);
    } /**
     * 
     * @param name
     * @param variants
     * @param dispIds
     */
    public static void invokeNoReply(OleAutomation auto, String name,
    Variant[] variants, int[] dispIds) {
    if (null == auto || StringUtils.isEmpty(name) || null == variants
    || null != dispIds) {
    return;
    }
    int[] ids = auto.getIDsOfNames(new String[] { name });
    if (null == ids || ids.length == 0) {
    return;
    }
    auto.invokeNoReply(ids[0], variants, dispIds);
    } // /**
    // *
    // * @param auto
    // * @param name
    // * @param value
    // * @return
    // */
    // public static boolean setProperty(OleAutomation auto, String name, int
    // value) {
    // Variant variant = new Variant(value);
    // return COMHelper.setProperty(auto, name, variant);
    // }
    //
    // /**
    // *
    // * @param auto
    // * @param name
    // * @param value
    // * @return
    // */
    // public static boolean setProperty(OleAutomation auto, String name,
    // long value) {
    // Variant variant = new Variant(value);
    // return COMHelper.setProperty(auto, name, variant);
    // }
    // /**
    // *
    // * @param auto
    // * @param name
    // * @param value
    // * @return
    // */
    // public static boolean setProperty(OleAutomation auto, String name,
    // float value) {
    // Variant variant = new Variant(value);
    // return COMHelper.setProperty(auto, name, variant);
    // }
    // /**
    // *
    // * @param auto
    // * @param name
    // * @param value
    // * @return
    // */
    // public static boolean setProperty(OleAutomation auto, String name,
    // double value) {
    // Variant variant = new Variant(value);
    // return COMHelper.setProperty(auto, name, variant);
    // }
    //
    // /**
    // *
    // * @param auto
    // * @param name
    // * @param value
    // * @return
    // */
    // public static boolean setProperty(OleAutomation auto, String name,
    // String value) {
    // Variant variant = new Variant(value);
    // return COMHelper.setProperty(auto, name, variant);
    // }
    //
    // /**
    // *
    // * @param auto
    // * @param name
    // * @param value
    // * @return
    // */
    // public static boolean setProperty(OleAutomation auto, String name,
    // short value) {
    // Variant variant = new Variant(value);
    // return COMHelper.setProperty(auto, name, variant);
    // }
    //
    // /**
    // *
    // * @param auto
    // * @param name
    // * @param value
    // * @return
    // */
    // public static boolean setProperty(OleAutomation auto, String name,
    // OleAutomation value) {
    // Variant variant = new Variant(value);
    // return COMHelper.setProperty(auto, name, variant);
    // }
    //
    // /**
    // *
    // * @param auto
    // * @param name
    // * @param value
    // * @return
    // */
    // public static boolean setProperty(OleAutomation auto, String name,
    // IDispatch value) {
    // Variant variant = new Variant(value);
    // return COMHelper.setProperty(auto, name, variant);
    // }
    // /**
    // *
    // * @param auto
    // * @param name
    // * @param value
    // * @return
    // */
    // public static boolean setProperty(OleAutomation auto, String name,
    // IUnknown value) {
    // Variant variant = new Variant(value);
    // return COMHelper.setProperty(auto, name, variant);
    // }
    /**
     * 
     * @param auto
     * @param name
     * @param value
     * @return
     */
    public static boolean setProperty(OleAutomation auto, int dispId,
    Variant value) {
    if (null == auto || null == value) {
    return false;
    }
    return auto.setProperty(dispId, value);
    } /**
     * 
     * @param auto
     * @param name
     * @param value
     * @return
     */
    public static boolean setProperty(OleAutomation auto, String name,
    Variant value) {
    if (null == auto || StringUtils.isEmpty(name) || null == value) {
    return false;
    }
    int[] ids = auto.getIDsOfNames(new String[] { name });
    if (null == ids || ids.length == 0) {
    return false;
    }
    return auto.setProperty(ids[0], value);
    } /**
     * 
     * @param auto
     * @param name
     * @param values
     * @return
     */
    public static boolean setProperty(OleAutomation auto, String name,
    Variant[] values) {
    if (null == auto || StringUtils.isEmpty(name) || null == values) {
    return false;
    }
    int[] ids = auto.getIDsOfNames(new String[] { name });
    if (null == ids || ids.length == 0) {
    return false;
    }
    return auto.setProperty(ids[0], values);
    } /**
     * 
     * @param auto
     * @param name
     * @param values
     * @param ids
     * @return
     */
    public static Variant getProperty(OleAutomation auto, String name,
    Variant[] values, int[] ids) {
    if (null == ids || ids.length == 0 || null == auto
    || StringUtils.isEmpty(name) || null == values) {
    return null;
    }
    int[] idsOfName = auto.getIDsOfNames(new String[] { name });
    if (null == idsOfName || idsOfName.length == 0) {
    return null;
    }
    return auto.getProperty(idsOfName[0], values, ids);
    }
    }
      

  4.   

    上面的代码是我封装的在Java中访问COM的办法。你根据代码中的内容进行搜索相关资料就可以了。
      

  5.   

    bovy,thanks for your help,but your answer is not for my problem.Thank you all the time!
      

  6.   

    用bovy的方法创建COM对象,然后用此COM对象的提供的接口访问表格即可
      

  7.   

    刚刚看到有个java2word不知道能不能用得上.....