2011-09-26 2 views
1

데이터를 쉼표로 구분 된 값의 문자열 ('\ n'을 사용하여 각 행 종료)로 수집하고 전자 메일로 한 달에 한 번 데이터를 나에게 보냅니다.쉼표로 구분 된 값 (csv)의 문자열을 Quickoffice 또는 Google 문서로로드

내 베타 테스터 중 한 명이 업로드 사이의 중간 데이터를보고 싶다고 알려 왔습니다. 이것을 (내 마음에) 자연스럽게하는 방법은 QuickOffice 또는 Google doc의 뷰어와 같은 "Excel과 같은"앱에 데이터를로드하는 것입니다. String을 파일에 쓰고 QuickOffice에로드하려고했습니다. QuickOffice를 시작할 수는 있지만 파일이 비어 있습니다. 또한 SD 카드에서 파일을 찾을 때 찾을 수 없습니다.

내 코드 :

File root = Environment.getExternalStorageDirectory(); 
try 
{ 
    BufferedWriter out = new BufferedWriter(new FileWriter(root.toString() + "/ww.csv")); 
    out.write(getPreferences(MODE_PRIVATE).getString("allTrips", "")); 
    out.flush(); // Probably not necessary 
    out.close(); 
} 
catch (IOException e) 
{ 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

Intent i1 = new Intent(android.content.Intent.ACTION_VIEW); 
Uri data = Uri.fromFile(new File(root.toString() + "/ww.csv")); 
i1.setDataAndType(data, "application/vnd.ms-excel"); 
startActivity(i1); 

날 내가 잘못 뭘하는지 알려 주시기 바랍니다. 위의 코드를 약간 개조 할 수있을뿐 아니라 완전히 다른 방식으로 작업을 완료 할 수 있습니다. 당신이하기 전에

, 내 매니페스트

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

을 추가 기억.

또한 SD 카드 대신 내 파일 시스템 (내 데이터는 작음)을 작성해 주지만 기꺼이 QuickOffice를 열 수는 있습니다.

데이터의 예 :

09/19/2011,AP2,Home,GW Parkway,12:03 PM,12:41 PM,38,Dry,Day 
09/20/2011,Home,AP2,MacArthur Blvd,7:18 AM,8:32 AM,74,Rain,Day 
09/20/2011,AP2,Home,Rock Creek Pkwy (Blagden),4:51 PM,5:45 PM,54,Dry,Day 
09/21/2011,Home,AP2,Rte 295,6:44 AM,7:36 AM,52,Rain,Day 

감사합니다.

UPDATE (2011 OCT 09) : 코드를 작성할 때

때때로, 당신은 다시 걸음을 당신이 달성하려고하는지 다시 생각해야합니다. 중간 데이터를 다시 형식화하고 사용자에게 읽기 쉬운 표를 만들어 월간 업로드 중간에 데이터를 볼 수 있기를 원합니다. 이 생각해 가장 쉬운 방법은 내 .csv 파일을 스프레드 시트에로드하는 것입니다. 외부 파일을 적절히 포맷했는지 확인하기 위해 외부 라이브러리를 사용하라는 Nikolay의 제안에 따라이 앱을 가능한 한 가만히 두려하지만 외부 라이브러리를 불필요하게 사용하는 것을 피하고 싶습니다. 그래서, 제 최종 솔루션은 HTML 형식을 사용하여 SD 카드에 약간 큰 파일을 작성한 다음 text/plain 또는 application/vnd.ms-excel이 아닌 text/html로 파일을 여는 것입니다. 코딩에 약 1 시간이 걸렸고 문제를 훌륭하게 해결 했으므로 문제를 해결할 것입니다.

+0

따옴표가있는 각 셀에 CSV 파일을 저장하려고 했습니까? "09/19/2011", "AP2", "집", "GW Parkway", "12:03 PM", "12:41 PM", "38", "Dry", "Day" 문제를 해결할 수 있기를 바랍니다. – Richard

+0

입력 해 주셔서 감사합니다. 나는 그것을 회상하지는 않지만 완전히 다른 방식으로 문제를 해결했습니다. 마지막 업데이트 (MAR 15 2012) 후 약 5 개월 후에 CSV 텍스트 파일 대신 SQLite 데이터베이스를 사용하도록 데이터 모델을 변경했습니다. CSV 파일 작업이 너무 느리기 때문에이 작업을 수행했습니다. 특히, 앱의 초기 설정 시간이 ** 분 **에서 눈에 띄지 않게되었습니다. 부작용은 SQLite 데이터베이스 파일을 보는 데 사용할 수있는 무료 App이 있기 때문에 더 이상 내 데이터 뷰어를 가질 필요가 없다는 것입니다. – Gdalya

답변

0

적어도 일부는 파일 형식입니다. "application/vnd.ms-excel"을 "text/plain"으로 변경하면 텍스트 파일에서 데이터를 열 수 있습니다. 이는 스프레드 시트에서 열 때보 다 읽기가 어렵 기 때문에 이상적이지 않습니다.

나는 더 나은 대답을 찾고 있습니다.

UPDATE (2011 OCT 09) : 결국

, 나의 더 나은 대답은 "작품 주위로 사용할 HTML 테이블 '이었다. 그것은 최소한의 저항의 길로 밝혀졌습니다. 자세한 설명은 업데이트 된 질문을 참조하십시오.

1

먼저 코드를 디버그하여 파일이 SD 카드에 제대로 기록되지 않는 이유를 알아야합니다 (아니면 잘못된 장소에서 파일을 찾고있는 중입니까?). 찾은 후 SD 카드를 마운트하고 Excel/Open/LibreOffice에서 열어서 올바르게 포맷되었는지 확인하십시오. opencsv와 같은 CSV 라이브러리를 사용하여 CSV 파일을 생성하고자 할 수 있습니다. 공백, 이스케이프 등을 처리하는 것은 까다로울 수 있으며 QuickOffice는 조작 된 CSV를 허용하지 않을 수 있습니다.

Google 문서 도구는 모두 다른 문제이므로 사용자의 Google 계정으로 인증하고 GDocs API/클라이언트 라이브러리를 사용하여 파일을 업로드해야합니다.

관련 문제