Возможно ли csv с несколькими вкладками/листами?

Я звоню в веб-службу, а данные из веб-службы находятся в формате csv. Если я попытаюсь сохранить данные в xls/xlsx, я получаю несколько листов в книге. Итак, как я могу сохранить данные в csv с помощью multipletab/sheets в С#.

Я знаю, что csv с несколькими вкладками нецелесообразно, но есть ли какой-нибудь проклятый способ или любая библиотека для сохранения данных в csv с несколькими вкладками/листами?

Ответ 1

CSV, как формат файла, принимает одну "таблицу" данных; в терминах Excel, что один лист книги. Хотя это простой текст, и вы можете его интерпретировать любым способом, "стандартный" формат CSV не поддерживает то, что думает ваш супервайзер.

Вы можете выдумать, что вы хотите несколькими способами:

  • Используйте для каждого листа другой файл с родственными, но отличными именами, например "Book1_Sheet1", "Book1_Sheet2" и т.д. Затем вы можете найти группы связанных файлов по тексту перед первым подчеркиванием. Это проще всего реализовать, но требует, чтобы пользователи шли по нескольким файлам на одну логическую "рабочую книгу", и если вы потерялись в тасовании, вы потеряли эти данные.

  • Выполните вышеуказанные действия, а также "запишите" файлы в один архив, который вы можете перемещать. Вы сохраняете чистое преимущество CSV в вышеуказанной опции, плюс удобство перемещения одного файла вместо нескольких, но недостаток в том, что вам нужно застегнуть/распаковать архив, чтобы получить фактические файлы. Чтобы облегчить боль, если вы работаете в .NET 4.5, у вас есть доступ к встроенной реализации ZipFile, а если вы не используете DotNetZip с открытым исходным кодом или SharpZipLib, любой из которых позволит вам программно создавать и потребляют стандартные ZIP файлы Windows. Вы также можете использовать почти универсальную комбинацию .tar.gz(aka.tgz), но вашим пользователям потребуется либо ваша программа, либо сторонний инструмент сжатия, например 7Zip или WinRAR, для создания архива из набора экспортированных CSV.

  • Внедрение формата квази-CSV, где пустая строка (содержащая только новую строку) действует как "разделитель вкладок", и ваш синтаксический анализатор ожидает новую строку заголовков столбцов, за которой последуют строки данных в новой конфигурации. Этот вариант стандартного CSV может не читаться другими пользователями CSV, поскольку он не соответствует ожидаемому файловому формату, и поэтому я бы рекомендовал вам не использовать расширение ".csv", поскольку оно будет запутывать и расстраивать пользователей, ожидающих чтобы иметь возможность открывать его в других приложениях, таких как электронные таблицы.

Ответ 2

Если я попытаюсь сохранить данные в xls/xlsx, я получаю несколько листов в книге.

Ваш ответ в вашем вопросе, не используйте text/csv (который, безусловно, может не делать несколько листов, он даже не может сделать один лист, нет такой вещи, как лист в тексте /csv, хотя в том, как некоторые приложения, такие как Excel или Calc, хотят импортировать их в формат, который имеет листы), но сохраняйте его как xls, xlsx, ods или другой формат, который имеет листы.

И XLSX, и ODS намного сложнее, чем text/csv, но, пожалуй, самые простые из их соответствующих наборов форматов.

Ответ 3

Я использую эту библиотеку некоторое время,

https://github.com/SheetJS/js-xlsx

в моих проектах для импорта данных и структуры из таких форматов, как: xls (x), csv и xml, но вы можете наверняка сохранить в этих форматах (все от клиента)!

Надеюсь, что это поможет вам, посмотрите онлайн-демонстрацию,

http://oss.sheetjs.com/js-xlsx/

загляните в исходный код или напишите вопрос о GH? но я думаю, вам придется делать большинство кодировок на вашем собственном

Ответ 4

Я думаю, что вы хотите уменьшить размер файла Excel. Если да, то вы можете сделать это, сохранив его в формате xlsb, то есть в формате двоичной рабочей книги Excel. Кроме того, вы можете уменьшить размер файла, удалив все пустые ячейки.