我有一个string与pipe道和双向正斜杠分开,我需要格式化为一个Excel文件作为输出在Java中

我从java文件中读取数据作为string,而从XML文件中读取类似的标签。 而且这些数据是以pipe道(|)分隔的,并且每个数据都用双正斜杠(//)分隔。 在可用的标签中共享三个string,需要以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 
  • 这些是我使用DOM中的DOMparsing器通过XML获取的3个string。

  • 我需要将string转换为Excel作为制表符分隔txt文件。

  • 输出文件的格式是,

输出格式

请build议我怎样才能实现这个循环,以获得像这样的一个。

我做了这样的事情 我能够以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格式。 您只需要根据需要进行格式化即可。

 Telecom,telecom,Knowledge Base: Information - Desktop,TRUE,k_knowledge_base Apple Mac,apple mac,Knowledge Category: Telecom,TRUE,k_category iPhone,iphone,Knowledge Category: Apple Mac,TRUE,k_category Working with iPhone,working with iphone,Knowledge Category: iPhone,TRUE,k_category Telecommunication,telecommunication,Knowledge Base: Infrastructure - Desktop,TRUE,k_knowledge_base Apple iPod,apple ipod,Knowledge Category: Telecommunication,TRUE,k_category iPad,ipad,Knowledge Category: Apple iPod,TRUE,k_category Telecom,telecom,Knowledge Base: Information - Desktop,TRUE,k_knowledge_base Apple Mac,apple mac,Knowledge Category: Telecom,TRUE,k_category iTunes 10,itunes 10,Knowledge Category: Apple Mac,TRUE,k_category Settings,settings,Knowledge Category: iTunes 10,TRUE,k_category Troubleshooting,troubleshooting,Knowledge Category: Settings,TRUE,k_category 

希望这可以帮助!

采取这三个迭代步骤为了导入您的多分隔的,非标准的XML数据到MS Excel。


第1步:导入数据
打开Excel →select单元格B2Data色带→ From Text图标( Get External Data组)→select.\yourFile.xml →从“文本导入向导”窗口中selectdelimited →点击next →仅selectother →types| (为您的分隔符)→击中finish →点击ok


第二步:输出
突出显示column C所有内容→ Copyselect→打开Notepad (notepad.exe)→ Paste内容→ Save记事本文件.\yourFile2.xml


第3步:import剩余
Activate Excel→selectColumn CDelete列C→selectcell C2Datafunction区→ From Text图标( Get External Data组)→select.\yourFile.xml →从“文本导入向导”窗口中selectdelimited →点击next →select只有other →types/ (为您的分隔符)→select“连续分隔符作为一个”→打finish →点击ok


执行这三个步骤之后,您应该使用上面描述的方式分隔XML数据(使用内置的MS Excelfunction)。

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