0

docx4japiを使用してJavaコードでdocxファイルテーブルデータを取得しようとしています。ここでは、一度に各セルデータを取得しようとしています。そのデータを取得する方法。ここでは、再帰的なメソッド呼び出しを持つコードを配置しています。

static void walkList1(List children) {
    i=children.size();
    int i=1;
    for (Object o : children) {
        if (o instanceof javax.xml.bind.JAXBElement) {
            if (((JAXBElement) o).getDeclaredType().getName()
                    .equals("org.docx4j.wml.Text")) {
                org.docx4j.wml.Text t = (org.docx4j.wml.Text) ((JAXBElement) o)
                .getValue();
                System.out.println(" 1 1    " + t.getValue());
            }
        }
        else if (o instanceof org.docx4j.wml.R) {
            org.docx4j.wml.R run = (org.docx4j.wml.R) o;
            walkList1(run.getRunContent());
        } else {
            System.out.println(" IGNORED " + o.getClass().getName());
        }
    }
}
4

1 に答える 1

0

この部分は疑わしいようです:

i=children.size();
int i=1;

最初のフィールドは変更可能な静的フィールドである必要があります(そうしないとコードがコンパイルされないため)。これは通常は悪い考えです。2つ目はメソッドに対してローカルですが、使用されることはありません。

すべてのコンテンツを1つにまとめようとしている場合は、を作成して再帰呼び出しに渡すことをおString勧めします。例:StringBuilder

static String walkList(List children) {
    StringBuilder dst = new StringBuilder();
    walkList1(children, dst);
    return dst.toString();
}
static void walkList1(List children, StringBuilder dst) {
    for (Object o : children) {
        if (o instanceof javax.xml.bind.JAXBElement) {
            if (((JAXBElement) o).getDeclaredType().getName()
                    .equals("org.docx4j.wml.Text")) {
                org.docx4j.wml.Text t = (org.docx4j.wml.Text) ((JAXBElement) o)
                .getValue();
                dst.append(t);
            }
        }
        else if (o instanceof org.docx4j.wml.R) {
            org.docx4j.wml.R run = (org.docx4j.wml.R) o;
            walkList1(run.getRunContent(), dst);
        } else {
            System.out.println(" IGNORED " + o.getClass().getName());
        }
    }
}

またList<T>JAXBElement<T>ジェネリック型です。生のタイプを使用する理由はありますか?

于 2011-01-31T12:03:54.173 に答える