我有一个字符串,管道和双正斜杠分开,我需要在excel文件中格式化为java输出

我有一个字符串,管道和双正斜杠分开,我需要在excel文件中格式化为java输出,java,xml,excel,dom,text-files,Java,Xml,Excel,Dom,Text Files,我在java中以字符串的形式获取数据,同时从XML文件中读取类似的标记。数据是管道(|)分隔的,每一个都是双正斜杠(//)分隔的。 共享标签中的三个字符串,这些字符串需要以excel格式转换为标签分隔的格式 Information - Desktop | Telecom//Apple Mac//iPhone//Working with iPhone Infrastructure - Desktop | Telecommunication//Apple iPod//iPad Information

我在java中以字符串的形式获取数据,同时从XML文件中读取类似的标记。数据是管道(|)分隔的,每一个都是双正斜杠(//)分隔的。 共享标签中的三个字符串,这些字符串需要以excel格式转换为标签分隔的格式

Information - Desktop | Telecom//Apple Mac//iPhone//Working with iPhone
Infrastructure - Desktop | Telecommunication//Apple iPod//iPad
Information - Desktop | Telecom//Apple Mac//iTunes 10//Settings//Troubleshooting
  • 这是我在java中使用DOM解析器通过XML获取的3个字符串

  • 我需要将excel转换为以制表符分隔的txt文件的字符串

  • 输出文件的格式为


请建议我如何实现循环以获得像这样的输出。

执行这三个迭代步骤,以便将多分隔的非标准xml数据导入MS Excel


步骤1:导入数据
打开
Excel
→ 选择单元格
B2
→ <代码>数据功能区→ <代码>来自文本图标(
获取外部数据
组)→ 选择
\yourFile.xml
→ 从“文本导入向导”窗口中选择
分隔的
→ 点击
next
→ 仅选择
other
→ 键入
|
(用于分隔符)→ 点击
finish
→ 点击
ok


步骤2:导出剩余部分
突出显示C列中的所有内容→ <代码>复制选择→ 打开记事本(Notepad.exe)→ <代码>粘贴内容→ <代码>保存记事本文件
\yourFile2.xml


步骤3:导入剩余部分
激活
Excel→ 选择
列C
→ <代码>删除C列→ 选择单元格C2→ <代码>数据功能区→ <代码>来自文本图标(
获取外部数据
组)→ 选择
\yourFile.xml
→ 从“文本导入向导”窗口中选择
分隔的
→ 点击
next
→ 仅选择
other
→ 键入
/
(用于分隔符)→ 选择“将连续分隔符视为一个”→ 点击
finish
→ 点击
ok


执行这三个步骤后,您应该按照上面描述的方式(使用内置的MS Excel功能)分离XML数据


如果您有任何问题,请告诉我。

执行这三个迭代步骤,以便将多分隔的非标准xml数据导入MS Excel


步骤1:导入数据
打开
Excel
→ 选择单元格
B2
→ <代码>数据功能区→ <代码>来自文本图标(
获取外部数据
组)→ 选择
\yourFile.xml
→ 从“文本导入向导”窗口中选择
分隔的
→ 点击
next
→ 仅选择
other
→ 键入
|
(用于分隔符)→ 点击
finish
→ 点击
ok


步骤2:导出剩余部分
突出显示C列中的所有内容→ <代码>复制选择→ 打开记事本(Notepad.exe)→ <代码>粘贴内容→ <代码>保存记事本文件
\yourFile2.xml


步骤3:导入剩余部分
激活
Excel→ 选择
列C
→ <代码>删除C列→ 选择单元格C2→ <代码>数据功能区→ <代码>来自文本图标(
获取外部数据
组)→ 选择
\yourFile.xml
→ 从“文本导入向导”窗口中选择
分隔的
→ 点击
next
→ 仅选择
other
→ 键入
/
(用于分隔符)→ 选择“将连续分隔符视为一个”→ 点击
finish
→ 点击
ok


执行这三个步骤后,您应该按照上面描述的方式(使用内置的MS Excel功能)分离XML数据


如果您有任何问题,请告诉我。

我做了类似的事情。我能够以CSV格式输出数据,也许您希望使用API将其写入Excel文件

public class StringToExcelProblem {

    static String INPUT_DATA = 
              "Information - Desktop | Telecom//Apple Mac//iPhone//Working with iPhone\n"
            + "Infrastructure - Desktop | Telecommunication//Apple iPod//iPad\n"
            + "Information - Desktop | Telecom//Apple Mac//iTunes 10//Settings//Troubleshooting\n";

    public static void main(String[] args) {
        StringTokenizer st = new StringTokenizer(INPUT_DATA, "\n");
        List<Block> allBlocks = new ArrayList<>();
        while(st.hasMoreTokens()) {
            String blockData = st.nextToken();
            String[] st2 = blockData.split(" \\| ");
            String parent = st2[0];
            String labels = st2[1];
            StringTokenizer st3 = new StringTokenizer(labels, "//");
            int index = 0;
            Block block = null;
            while(st3.hasMoreTokens()) {
                String label = st3.nextToken();
                if(index == 0){
                    block = new Block(parent, label);
                    index ++;
                } else {
                    block.add(label);
                }
                parent = label;
            }
            allBlocks.add(block);
        }
        for(Block b: allBlocks) {
            for(RowObj r: b.rows){
                System.out.println(r);
            }
            System.out.println();
        }
    }
}

class RowObj {
    String label;
    String value;
    String parentId;
    String active;
    String parentTable;

    @Override
    public String toString() {
        return label + "," + value + "," + parentId + "," + active + "," + parentTable;
    }
}

class Block {
    List<RowObj> rows;

    public Block(String parent, String name) {
        RowObj row = new RowObj();
        row.label = name;
        row.value = name.toLowerCase();
        row.parentId = "Knowledge Base: " + parent;
        row.active = "TRUE";
        row.parentTable = "k_knowledge_base";

        rows = new ArrayList<>();
        rows.add(row);
    }

    public void add(String name) {
        RowObj parent = rows.get(rows.size()-1);

        RowObj row = new RowObj();
        row.label = name;
        row.value = name.toLowerCase();
        row.parentId = "Knowledge Category: " + parent.label;
        row.active = "TRUE";
        row.parentTable = "k_category";

        rows.add(row);
    }

    @Override
    public String toString() {
        return rows.toString();
    }
}


希望这有帮助

我做了类似的事情。我能够以CSV格式输出数据,也许您希望使用API将其写入Excel文件

public class StringToExcelProblem {

    static String INPUT_DATA = 
              "Information - Desktop | Telecom//Apple Mac//iPhone//Working with iPhone\n"
            + "Infrastructure - Desktop | Telecommunication//Apple iPod//iPad\n"
            + "Information - Desktop | Telecom//Apple Mac//iTunes 10//Settings//Troubleshooting\n";

    public static void main(String[] args) {
        StringTokenizer st = new StringTokenizer(INPUT_DATA, "\n");
        List<Block> allBlocks = new ArrayList<>();
        while(st.hasMoreTokens()) {
            String blockData = st.nextToken();
            String[] st2 = blockData.split(" \\| ");
            String parent = st2[0];
            String labels = st2[1];
            StringTokenizer st3 = new StringTokenizer(labels, "//");
            int index = 0;
            Block block = null;
            while(st3.hasMoreTokens()) {
                String label = st3.nextToken();
                if(index == 0){
                    block = new Block(parent, label);
                    index ++;
                } else {
                    block.add(label);
                }
                parent = label;
            }
            allBlocks.add(block);
        }
        for(Block b: allBlocks) {
            for(RowObj r: b.rows){
                System.out.println(r);
            }
            System.out.println();
        }
    }
}

class RowObj {
    String label;
    String value;
    String parentId;
    String active;
    String parentTable;

    @Override
    public String toString() {
        return label + "," + value + "," + parentId + "," + active + "," + parentTable;
    }
}

class Block {
    List<RowObj> rows;

    public Block(String parent, String name) {
        RowObj row = new RowObj();
        row.label = name;
        row.value = name.toLowerCase();
        row.parentId = "Knowledge Base: " + parent;
        row.active = "TRUE";
        row.parentTable = "k_knowledge_base";

        rows = new ArrayList<>();
        rows.add(row);
    }

    public void add(String name) {
        RowObj parent = rows.get(rows.size()-1);

        RowObj row = new RowObj();
        row.label = name;
        row.value = name.toLowerCase();
        row.parentId = "Knowledge Category: " + parent.label;
        row.active = "TRUE";
        row.parentTable = "k_category";

        rows.add(row);
    }

    @Override
    public String toString() {
        return rows.toString();
    }
}


希望这有帮助

有趣的问题。问题:在C4单元中,您是如何获得
知识类别:DH Apple Mac
?它不应该是知识类别:苹果Mac吗?在C5单元中,您是如何获得知识类别:DH iTunes 10的?是的,在C4单元中是知识类别:苹果Mac,在C5单元中是知识类别:iPhone。这是错误的,因为我也在用字符串做一些实验。有趣的问题。问题:在C4单元中,您是如何获得知识类别:DH Apple Mac?它不应该是知识类别:苹果Mac吗?在C5单元中,您是如何获得知识类别:DH iTunes 10的?是的,在C4单元中是知识类别:苹果Mac,在C5单元中是知识类别:iPhone。这是错误的,因为我也在做一些字符串的实验。我在java正文中有这些字符串值,我在java中解析XML以获得4个输出文件,我已经完成了3个输出文件,但对于第4个,我不知道如何实现该字符串值以获得所需格式的输出(txt文件-我在excel中以制表符分隔的形式导入)。我不确定我是否理解您的要求。不过,您是否尝试将解析文件的数据部分复制到单独的文本编辑器(如记事本)中?您可以将该数据另存为
.txt
。excel非常方便地处理.txt文件