【问题标题】:Excel/CSV - Convert key value to csvExcel/CSV - 将键值转换为 csv
【发布时间】:2016-07-02 07:29:41
【问题描述】:

我在 Excel 中有一个包含以下记录的列:

{Property1=选择加入,Property2=选择退出,Property3=选择退出}
{Property1=选择加入,Property2=选择退出,Property3=选择退出}
{Property1=选择加入,Property2=选择加入,Property3=选择加入}

有没有办法将其转换为 csv 或三个单独的列

属性 1、属性 2、属性 3
选择退出,选择退出,选择加入
选择加入,选择加入,选择加入
选择退出,选择退出,选择加入

【问题讨论】:

  • 当然有办法。顺便说一句,要求代码的人预计会做出某种程度的原始努力。
  • 不,我不是要代码。我可以解析一下,谢谢。我期待在 excel 本身中有一种方法。
  • 使用本机 excel 函数的文本解析仅适用于静态项目数。如果您的 samepl (JSON..?) 数据真正代表输入,那么可以,可以构造一个公式将行拆分为列。 fwiw,VBA 子过程会更合适,C#/VB.Net 有一些 JSON 库可以解决问题。
  • 不是一个真正的答案,但您可以使用 Text to Columns 功能,使用 =, 作为分隔符 - 这将为您提供您需要的 3 个列以及每个 3 个标题一个单独的列,您可以轻松删除...更多的黑客,但它会做的伎俩。

标签: excel csv export-to-csv


【解决方案1】:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

public class ExcelReader {

    public void excel(String input) {
        // TODO Auto-generated method stub
        try {

            String S = "C:/Users/DELL/Desktop/workspace_luna/ecel dataload/"
                    + input;
            String S1 = "C:/Users/DELL/Desktop/workspace_luna/ecel dataload/"
                    + input.substring(0, input.indexOf('.')) + ".xls";
            File f = new File(S);

            @SuppressWarnings("resource")
            OutputStream os = (OutputStream) new FileOutputStream(f);

            String encoding = "UTF8";
            OutputStreamWriter osw = new OutputStreamWriter(os, encoding);

            BufferedWriter bw = new BufferedWriter(osw);

            File f2 = new File(S1);

            Workbook w = Workbook.getWorkbook(f2);

            for (int sheet = 0; sheet < w.getNumberOfSheets(); sheet++) {
                Sheet s = w.getSheet(sheet);



                Cell[] row = null;


                for (int i = 0; i < s.getRows(); i++) {


                    row = s.getRow(i);

                    if (row.length > 0) {

                        bw.write(row[0].getContents());
                        for (int j = 1; j < row.length; j++) {
                            bw.write("||");

                            bw.write(row[j].getContents());
                        }
                    }

                    bw.newLine();
                }
            }
            bw.flush();
            bw.close();
        } catch (UnsupportedEncodingException e) {
            System.err.println(e.toString());
        } catch (IOException e) {
            System.err.println(e.toString());
        } catch (Exception e) {
            System.err.println(e.toString());
        }
    }

}

【讨论】:

    【解决方案2】:

    为了演示,将列标题标签放入右侧一些未使用的单元格中,并在第一个单元格的正下方使用此标准公式。

    =TRIM(LEFT(SUBSTITUTE(SUBSTITUTE(REPLACE($A1,1,SEARCH(C$1,$A1)+LEN(C$1),""),"}",","),",",REPT(" ",LEN($A1))), LEN($A1)))
    

    向右和向下填充。

        

    【讨论】:

      猜你喜欢
      • 2015-04-23
      • 1970-01-01
      • 2020-02-24
      • 2014-11-19
      • 2012-10-10
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      相关资源
      最近更新 更多