반응형
첫 번째 항목이 "ID"인 CSV 파일이 Excel에서 손상되었습니다.
java로 csv 파일에 데이터를 쓰려고 하는데, 생성된 파일을 excel로 열 때 파일이 손상되었다는 오류가 발생합니다.메모장에서 파일을 열면 올바르게 포맷된 것처럼 보이기 때문에 무엇이 문제인지 잘 모르겠습니다.FileWriter 클래스를 사용하여 데이터를 파일로 출력하고 있습니다.
FileWriter writer = new FileWriter("test.csv");
writer.append("ID");
writer.append(',');
writer.append("name");
writer.append(',');
...
writer.append('\n');
writer.flush();
writer.close();
CSV 파일로 인쇄하려면 Java의 일부 라이브러리를 사용해야 합니까?저는 당신이 올바른 포맷을 사용하기만 한다면 이것을 자바에서 기본적으로 할 수 있을 것이라고 생각했습니다.
도와주셔서 감사합니다
쇼
MS Excel이 그런 내용의 파일을 어떻게 열어야 할지 결정할 수 없기 때문입니다.
문제를 해결하려면 대체"ID"
와 함께"id"
.
당신이 가지고 있는ID
스프레드시트 유형 파일의 첫 번째 단어로, 이는 SYLK 파일의 사양과 일치하며 MS Excel(및 잠재적으로 다른 스프레드시트 앱)이 SYLK 파일로 열려고 시도합니다.그러나 파일의 나머지 값은 쉼표로 구분되어 있기 때문에 파일의 전체 사양을 충족하지 못합니다.따라서 오류가 표시됩니다.
이드 | 이름. |
---|---|
1 | 존 도우 |
2 | 제인 도우 |
추가적으로, 파일 개체를 적게 사용하여 파일 액세스를 최소화하려고 합니다.
테스트를 해보니 아래 코드가 작동할 것 같습니다.
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class CsvWriter {
public static void main(String[] args) {
try (PrintWriter writer = new PrintWriter("test.csv")) {
StringBuilder sb = new StringBuilder();
sb.append("id");
sb.append(',');
sb.append("Name");
sb.append('\n');
sb.append("1");
sb.append(',');
sb.append("Jon Doe");
sb.append('\n');
sb.append("2");
sb.append(',');
sb.append("Jane Doe");
sb.append('\n');
writer.write(sb.toString());
System.out.println("write success.");
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
}
}
}
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class CsvFile {
public static void main(String[]args){
PrintWriter pw = null;
try {
pw = new PrintWriter(new File("NewData.csv"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
StringBuilder builder = new StringBuilder();
String columnNamesList = "Id,Name";
// No need give the headers Like: id, Name on builder.append
builder.append(columnNamesList +"\n");
builder.append("1"+",");
builder.append("Chola");
builder.append('\n');
pw.write(builder.toString());
pw.close();
System.out.println("done!");
}
}
이 코드를 컴파일한 후 CSV에 문자열 값을 표시하는 Java의 간단한 코드라고 생각합니다.
public class CsvWriter {
public static void main(String args[]) {
// File input path
System.out.println("Starting....");
File file = new File("/home/Desktop/test/output.csv");
try {
FileWriter output = new FileWriter(file);
CSVWriter write = new CSVWriter(output);
// Header column value
String[] header = { "ID", "Name", "Address", "Phone Number" };
write.writeNext(header);
// Value
String[] data1 = { "1", "First Name", "Address1", "12345" };
write.writeNext(data1);
String[] data2 = { "2", "Second Name", "Address2", "123456" };
write.writeNext(data2);
String[] data3 = { "3", "Third Name", "Address3", "1234567" };
write.writeNext(data3);
write.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("End.");
}
}
private static final String FILE_HEADER ="meter_Number,latestDate";
private static final String COMMA_DELIMITER = ",";
private static final String NEW_LINE_SEPARATOR = "\n";
static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:m m:ss");
private void writeToCsv(Map<String, Date> meterMap) {
try {
Iterator<Map.Entry<String, Date>> iter = meterMap.entrySet().iterator();
FileWriter fw = new FileWriter("smaple.csv");
fw.append(FILE_HEADER.toString());
fw.append(NEW_LINE_SEPARATOR);
while (iter.hasNext()) {
Map.Entry<String, Date> entry = iter.next();
try {
fw.append(entry.getKey());
fw.append(COMMA_DELIMITER);
fw.append(formatter.format(entry.getValue()));
fw.append(NEW_LINE_SEPARATOR);
} catch (Exception e) {
e.printStackTrace();
} finally {
iter.remove();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
언급URL : https://stackoverflow.com/questions/30073980/csv-file-with-id-as-first-item-is-corrupt-in-excel
반응형
'prosource' 카테고리의 다른 글
grep을 사용하여 문자열 "hello"가 있는 모든 파일을 현재 디렉터리에서 검색하고 .h 및 .cc 파일만 표시하려면 어떻게 해야 합니까? (0) | 2023.05.08 |
---|---|
C#에서 Excel 파일을 여는 방법은 무엇입니까? (0) | 2023.05.08 |
LINQ - 전체 외부 결합 (0) | 2023.05.08 |
에서 인쇄할 수 없는 문자를 검색하려면 어떻게 해야 합니까?NET? (0) | 2023.05.08 |
Azure 웹 페이지 배포에서 폰타썸을 작동시키는 방법은 무엇입니까? (0) | 2023.05.08 |