Загрузите строку значений, разделенных запятыми (csv), в Quickoffice или Google Doc. - PullRequest
1 голос
/ 26 сентября 2011

Я пишу приложение для Android, которое собирает данные в виде строки значений, разделенных запятыми (каждая строка заканчивается на \ n), а затем отправляет мне данные по электронной почте один раз в месяц.

Один из моих бета-тестеров сообщил мне, что он хотел бы иметь возможность просматривать промежуточные данные между загрузками. Естественный способ сделать это (на мой взгляд) - загрузить данные в приложение, похожее на «Excel» (например, QuickOffice или средство просмотра документа Google). Я попытался записать строку в файл и затем загрузить ее в 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

Спасибо.

ОБНОВЛЕНИЕ (09 октября 2011 г.):

Иногда при написании кода вам нужно сделать шаг назад и переосмыслить то, что вы пытаетесь достичь. Все, что я хочу сделать, это переформатировать свои промежуточные данные и создать удобную для чтения таблицу, чтобы пользователь мог видеть данные между загрузками в месяц. Я думал, что самый простой способ сделать это - загрузить мой файл .csv в электронную таблицу. Предложение Николая об использовании внешней библиотеки, чтобы убедиться, что мой файл был правильно отформатирован, могло бы сработать, но я стараюсь сделать это приложение максимально компактным, поэтому я хочу избегать ненужного использования (и обучения использованию) внешних библиотек. Итак, моим конечным решением было записать файл немного большего размера на SD-карту в формате html, а затем открыть файл как text / html, а не text / plain или application / vnd.ms-excel. Это заняло около часа программирования и хорошо решило проблему, поэтому я собираюсь считать проблему закрытой.

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Во-первых, вам нужно отладить свой код и выяснить, почему файл не записывается на SD-карту должным образом (или, может быть, вы просто ищете его не в том месте?). После того, как вы найдете его, установите SD-карту и попробуйте открыть ее в Excel / Open / LibreOffice, чтобы убедиться, что она правильно отформатирована. Возможно, вы захотите использовать библиотеку CSV, такую ​​как opencsv, для создания файла CSV. Обработка пробелов, выходов и т. Д. Может быть сложной, и QuickOffice может не переносить неправильно сформированный CSV.

Google Docs - это совсем другое дело, вам нужно пройти аутентификацию с учетной записью Google пользователя и использовать API-интерфейс GDocs / клиентскую библиотеку для загрузки файла.

0 голосов
/ 28 сентября 2011

По крайней мере, часть проблемы - формат файла. Когда я изменяю «application / vnd.ms-excel» на «text / plain», я могу открыть данные в текстовом файле. Это не идеально, потому что его сложнее читать, чем если бы оно открывалось в электронной таблице.

Я буду искать лучший ответ.

ОБНОВЛЕНИЕ (9 октября 2011 г.):

В итоге мой лучший ответ был: «Используйте таблицу HTML в качестве обходного пути». Это оказался путь наименьшего сопротивления. Смотрите мой обновленный вопрос для более подробного объяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...