it-roy-ru.com

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

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

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

12
hello temp9

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

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

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

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

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

9
KeithS

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

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

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

3
Jon Hanna

Я уже давно пользуюсь этой библиотекой, 

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

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

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

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

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

2
Kresimir Pendic

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

Я надеюсь, что это отвечает вашей озабоченности. 

0
Asim Khan