Как сделать экспорт csv

Добавил пользователь Валентин П.
Обновлено: 09.09.2024

Часто при формировании прайс-листов требуется выгрузить большой объём данных в текстовый файл в формате CSV (разделитель - точка с запятой, или запятая)
И далеко не всегда может помочь сохранение файла в этом формате, поскольку в выгрузку попадают лишние данные (заголовки таблиц, лишние строки и столбцы, и т.д.)

В данном случае поможет экспорт заданного диапазона ячеек в файл CSV, что проще всего сделать макросом с использованием функции Range2CSV:

Вот код самой функции Range2CSV:

Улучшенная версия кода (работает заметно быстрее), и дополнительно заключает текст всех ячеек в кавычки:

Комментарии

Если нужно чтобы выводились данные до первой пустой ячейки первого столбца.:
После строки
If Len(Range2CSV) > 50000 Then buffer$ = buffer$ & Range2CSV: Range2CSV = ""
Добавляем строку:
If arr(i + 1, 1) = "" Then i = UBound(arr, 1) 'Если значение первой ячейки следующей строки массива пустое, то завершаем цикл

Автору спасибо! Много полезной инфы на сайте.

Спасибо огромное за помощь!

Доброго времени суток!

А как сделать,чтоб значения в ячейках выгружались в числовом или денежно формате с двумя знаками после запятой?
Вот например есть 4499795,40 выгружается 4499795,4 или 900 000,00 выгружается 900000

Всё хорошо. Только при импорте файла csv в престашоп возникает ошибка . С чем может быть связана?

спасибо! теперь запускается.

подскажите, почему таблица остается таблицей, а не переходит в вид столбца в выгружаемом файле?
при этом, если в строке
CSVtext$ = Range2CSV(ra, ";")
поменять точку с запятой на запятую, то таблица становится столбцом, но запятые в цифрах при этом путаются с запятыми-разделителями. если же поставить точку, то она будет путаться с точками в дате.

не понимаю, как работает эта последняя функция, поэтому не знаю, как это победить

В статье дана ссылка на функцию SaveTXTfile
Надо было код этой функции тоже вставить в ваш файл - и всё сразу заработает.

на SaveTXTfile пишет Sub or Function not defined

Ну так сделайте цикл, в котором будут просматриваться все строки таблицы.

Пример кода написать не могу, не видя ваш файл.
Если сами не справитесь - можете заказать разработку такого макроса (оформите заказ, прикрепив вашу таблицу, и разъяснив, что и куда должно выгружаться)

Подскажите, пожалуйста, как сделать, чтоб выгружать не сплошной диапазон, а только строки, у которых (например) в 11 колонке написано имя формируемого файла?
В идеале будет генерироваться несколько файлов, имена файлов которых прописаны в 11 колонке. В диапазоне возможно наличие строк, у которых значение равно цифре 0

Спасибо, за оперативный ответ.
В новом файле все заработало. Буду искать где были конфликты.
Отдельное спасибо за полезный ресурс.

Не должна эта строка выдавать ошибку, если только мой макрос не конфликтует с существующими в том же файле вашими макросами.

Попробуйте код на новом файле (в котором нет других макросов), и заново скопируйте необходимые макросы с моего сайта.
Если в новом файле проблема исчезнет - ищите проблему несовместимости в своих макросах.

В строке
txt = "": For j = LBound(arr, 2) To UBound(arr, 2): txt = txt & ColumnsSeparator$ & arr(i, j): Next j
Выделяет (txt =) с коментарием: Expected function or variable

Спасибо за оперативный ответ, попробуем

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

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

Тут есть много вариантов:

  • предварительно заменить разделитель в ячейке на какой-то другой символ
  • заменить разделитель на другой символ только в выгрузке CSV (в ячейке оставить как было)
  • экранировать сам символ разделителя (например, текст 123;456 заменить на 123";"456 или на 123/;456)
  • экранировать всю ячейку в выгрузке (например, текст 123;456 заменить на "123;456")
  • и т.д. и т.п. (при нескольких разделителях в ячейке появляются ещё варианты)

Предусматривать все эти варианты в макросе не очень хочется - объём кода заметно увеличится, а желающих внести какие-то дополнительные "навороты" только прибавится.

В вашем случае всё решалось заменой одной строки кода:

Надо вместо arr(i, j) подставить некую функцию, которая произведёт изменения текста в элементе массива при наличии в нём символов разделителей.

к сожалению не совсем корректно работает Function Range2CSV - если внутри ячейки содержится разделитель (у меня это была сложная гиперссылка) -исходнй ЦээСВэ искажается - при копипасте исохранить в формате csv -всё прекрасно

ну даже не знаю говорить ли спасибо? :) полдня промудохался
СПАСИБО - будет Муку наука - код должен быть чисто своим

Транспортировка данных между приложениями.

Файлы с разделителями-запятыми (CSV) — это способ передачи данных между приложениями. Базы данных, такие как MySQL, и программы для работы с электронными таблицами, такие как Excel, поддерживают импорт и экспорт через CSV, поэтому вы можете использовать файлы CSV для обмена данными между ними.

CSV-файлы являются открытым текстом, поэтому они легковесны и их легко экспортировать из MySQL.

С сервера базы данных

Если у вас есть доступ к серверу, на котором работает MySQL, вы можете экспортировать выбор с помощью INTO OUTFILE команда.

Это выведет файл CSV в /tmp/mysqlfiles/table.csv или там, где вы его настроили. Вы должны убедиться, что пользователь работает с MySQL (обычно mysql или root ) имеет право собственности и право записи в каталог.

Вы также должны убедиться, что secure_file_priv настройка позволяет MySQL получить доступ к этому каталогу. Это по умолчанию блокирует доступ на чтение и запись из SQL-запросов. Это хорошая вещь; если ваш код уязвим для внедрения SQL, любой потенциальный злоумышленник будет иметь доступ только к MySQL, а не к остальной части файловой системы.

Вы можете внести в белый список определенные каталоги, отредактировав свой конфигурационный файл MySQL (обычно расположенный по адресу /etc/my.cnf ) включать:

Что позволит MySQL читать и писать в /tmp/mysqlfiles/ (который вы должны будете создать с помощью mkdir ). Как только MySQL сможет экспортировать файлы, вы сможете запускать запрос и выводить файлы CSV.

С ENCLOSED BY настройки, запятые будут правильно экранированы, например:

Которые вы можете взять и импортировать непосредственно в любую программу электронных таблиц или другое программное обеспечение.

Электронная таблица списка, разделенного запятыми.

Помните, что экспортированный CSV-файл не включает заголовки столбцов, но столбцы будут в том же порядке, что и SELECT заявление. Кроме того, нулевые значения будут экспортированы как N , что является ожидаемым поведением, но если вы хотите изменить это, вы можете изменить выбор, обернув ifnull(field, "") вокруг ваших полей в вашем SELECT заявление.

Из командной строки MySQL

Если у вас есть только доступ из командной строки к экземпляру MySQL, а не доступ к самому серверу (например, когда он не управляется вами, в случае Amazon RDS), проблема немного сложнее. Пока вы можете использовать FIELDS TERMINATED BY ',' на сервере для создания списка, разделенного запятыми, интерфейс командной строки MySQL по умолчанию разделяется на вкладки.

Просто введите запрос из командной строки и направьте его в файл:

Вы можете просто заменить каждую вкладку запятой, которая будет работать, но приведет к сбою, если во входных данных есть запятые. Если вы на 100% уверены, что в вашем файле TSV нет запятых (обратитесь к grep ), вы можете заменить вкладки на sed :

Но если у вас есть запятые в ваших данных, вам придется использовать намного длиннее регулярное выражение:

Это будет правильно экранировать поля с кавычками, что решит проблему с запятыми.

Если ваши входные данные содержат вкладки, вам не повезло, и вам придется самостоятельно создавать файл CSV с использованием языка сценариев.

Сделайте это вручную с реальным языком программирования

MySQL (и большинство баз данных) предназначены для взаимодействия, поэтому у вас, вероятно, уже есть какой-то язык программирования, связанный с MySQL. Большинство языков также могут записывать на диск, поэтому вы можете создавать свои собственные выходные скрипты CSV, читая поля из базы данных напрямую, правильно их экранируя и записывая файл с разделителями-запятыми.

Классическая оболочка Cmd.exe в операционных системах Windows предоставляет очень простые средства для обработки текстов. Например, команда For /f позволяет читать строки текста из файла и обрабатывать их как одну строку, а оператор > дает возможность писать выходные данные команды в текстовый файл.

Windows PowerShell справляется с упомянутыми выше трудностями, предоставляя строку команд для импорта и экспорта структурированных данных. Все эти команды содержат в названии либо слово CSV, либо слово XML, поэтому вы можете получить их список, введя следующую команду в строке PowerShell:

Когда вы запускаете эту команду, вы видите список всех команд в сессии PowerShell, которые содержат в названии либо слова CSV и XML, либо какие-то дополнительные имена. Я расскажу о командах, которые содержат глаголы Export и Import.

Импорт файлов CSV

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

На экране 1 показано, как эти данные будут представлены в файле CSV.

Import-Csv читает файл CSV и выводит список пользовательских объектов PowerShell: один для каждой строки вводимых данных. PowerShell воспринимает первую строку файла CSV как свойства объекта, а последующие строки файла являются выводимыми объектами. Например, если вы запускаете команду Import-Csv Sample.csv, то PowerShell выведет три объекта с двумя свойствами для каждого: DisplayName и Mail, как показано на экране 2.

Если файл CSV, который вы хотите импортировать, не имеет строки заголовка, вы можете использовать параметр –Header для наименования свойств объекта. Таким образом, если бы в Sample1.csv отсутствовала первая строка (заголовок), вы бы использовали команду, например:

Поскольку Import-Csv выводит объекты PowerShell, вы можете задействовать другие команды PowerShell для обработки объектов. Например, предположим, что вы хотите рассортировать выводимые данные по критерию DisplayName, но вам нужно только свойство Mail для каждого объекта. Чтобы это сделать, вы используете команды Sort-Object и Select-Object:

Также вы можете передать эти объекты команде ForEach-Object для обработки:

Эта команда использует символ –f для вывода форматированной строки для каждого объекта и производит вывод данных, показанный на экране 3.

Экспорт файлов CSV

Заметьте, что Export-Csv может выводить данные любых объектов PowerShell, а не только объектов, созданных при помощи Import-Csv. Например, взгляните на такую команду:

Эта команда создает файл CSV, содержащий в текущей папке файлы, отсортированные по критерию размера. Эта команда использует Select-Object для выбора полного файлового имени каждого файла, времени последнего изменения и размера файла (длины). Таким образом, эти три свойства будут являться столбцами в файле CSV.

Импорт файлов XML

XML представляет собой другой тип текстового файла, который хранит структурированные данные. В листинге 1 приведен пример представления в XML данных из таблицы.

Данные в документе XML организованы в иерархическом порядке. В Sample.xml (листинг 1) у вас есть корневой элемент () и три дочерних элемента (). Элементы располагаются в парах и содержат другие элементы. Открывающий элемент использует угловые скобки вокруг своего имени, а закрывающий элемент использует косую черту перед именем элемента. Когда вы работаете с данными XML в PowerShell, вы должны иметь единственный корневой элемент. Другие элементы содержатся внутри корневого элемента.

В PowerShell есть команда Import-Clixml, но Import-Clixml не может импортировать Sample.xml, потому что Sample.xml не полностью соответствует формату, который требует cmdlet. Вместо него вы можете использовать Get-Content cmdlet и дополнительный тип обеспечения [Xml]: $Data = [Xml] (Get-Content Sample.xml).

После ввода команды переменная $Data содержит объект XmlDocument. Объект XmlDocument включает два свойства: xml (элемент в верхней части файла) и базу данных (корневой элемент). Вы можете вывести данные из файла XML так:

Эта команда производит точно такой же вывод данных, как показано на экране 2: выводит данные трех объектов с двумя свойствами для каждого (DisplayName и Mail).

Если данные файла XML, который вы хотите импортировать, были сохранены Export-Clixml, вам не нужен дополнительный акселератор типа [Xml] и команда Get-Content. Вместо них вы можете использовать Import-Clixml, о чем я расскажу в следующем разделе.

Экспорт Файлов XML

Вы можете экспортировать объект XmlDocument в файл, используя Export-Clixml. Как и Export-Csv, команда Export-Clixml требует имя файла. Рассмотрим такие команды:

Первая команда импортирует Sample.xml (листинг 1) в качестве объекта XmlDocument. Вторая команда экспортирует объект XmlDocument в Data.xml.

Import-Clixml противоположна Export-Clixml. Import-Clixml возвращает файл XML, который был экспортирован Export-Clixml в качестве объекта XmlDocument. Например, в следующей команде Import-Clixml возвращает Data.xml:

После запуска этой команды переменная $Data2 содержит копию того же объекта XmlDocument, который хранится в $Data.

Помните, что вы можете применять команду Import-Clixml для импорта только файла XML, созданного Export-Clixml. Это связано с тем, что файл XML должен содержать специфический набор элементов, чтобы Import-Clixml могла импортировать его. Если файл XML не в нужном формате, вам необходимо использовать дополнительный акселератор типа [Xml] и Get-Content, о чем говорилось в предыдущем разделе.

Управляйте файлами CVS и XML

Текстовые файлы CSV и XML представляют собой популярные форматы для обмена данными. Создатели PowerShell предоставили нам несколько весьма мощных и простых в использовании команд, которые помогают импортировать и экспортировать файлы в оба формата. Выполняемый вручную анализ файлов CSV и XML остался в прошлом.


Здравствуйте, друзья. Сегодня поговорим о таких полезных функциях, как импорт и экспорт контактов. Для чего они нужны? Человек в силу разных обстоятельств часто меняет или приобретает новые мобильные устройства, заводит дополнительные аккаунты и электронные почтовые ящики. Каждый раз заполнять адресную книгу вручную – процесс трудоёмкий, утомительный и не очень приятный. Рассматриваемые функции призваны облегчить данную задачу. Экспортировать – это вынести перечень имеющихся адресов в сторонний файл заданного формата, импортировать – это загрузить данные их созданного документа в новую адресную книгу. Ниже я вам расскажу, как создать файл csv для импорта контактов в аккаунт Google, почту от Яндекса и Outlook, а также о том, как перенести адреса в новый смартфон Андроид и телефон Nokia на платформе S30+.

Что такое csv и как создать

CSV – это тот самый документ заданного формата, который используется для переноса адресов между почтовыми службами. Он представляет собой своеобразную табличку — хранилище данных, разделённых запятыми. Создать его можно двумя способами:

  1. Экспортировать из имеющейся адресной книги почтовой службы.
  2. Создать вручную посредством программ Microsoft Excel, OpenOffice и других.

Почтовые клиенты

Друзья, чтобы вы воочию увидели, как выглядит файл csv, сначала расскажу, как создать его для экспорта контактов из Google и Яндекс.Почты с помощью функционала самих почтовых сервисов, а также о том, как их из этого файла импортировать обратно.

Начнём с Google, для экспорта сделайте следующее:





Друзья, вот вы его создали. Если вы его откроете, то увидите, что верхняя строка – это название разделов – Имя, Телефон, Почта и других.


В случае с Google они будут написаны по-английски. Имена, написанные русским языком закодируются, латиницей – останутся как есть. Разделы отделены запятыми. Если какой-то столбец не имеет данных, то вместо них тоже ставится запятая.


Чтобы выполнить импорт контактов в новый аккаунт Google из созданного вами contacts.csv, проделайте следующее:





Друзья, вот и вся нехитрая наука. По такому принципу осуществляются импорт и экспорт во все почтовые сервисы. Для закрепления материала опишу ещё, как импортировать контакты пользуясь тем же принципом в адресную строку Яндекс.Почты:



Вручную

Друзья, теперь, когда вы представляете, что такое CSV-файл, попробуйте создать его вручную:

  1. Откройте пустой документ Microsoft Excel или OpenOffice.
  2. В первую строку поместите заголовки для столбцов сведений – имя, фамилия, телефон, почта и так далее.
  3. Заполните таблицу (необязательно писать данные в каждый имеющийся столбец, часть ячеек могут быть пустыми, названия удалять нельзя).



Outlook

Друзья, полученный CSV-файл вы можете использовать для импорта контактов в Outlook:







Телефоны

Вкратце расскажу о том, как перенести контакты из одного телефона на другой.

Андроид

На смартфонах с платформой Андроид сделать это очень просто:

В телефонах Nokia на платформе S30+ импортировать контакты можно следующим образом:

  1. В контактах, настройках или опциях найдите функцию Backup (резервное копирование).
  2. Сделайте копию телефонных номеров и сохраните её на карте памяти (она будет выглядеть как backup.dat).
  3. Переставьте карту памяти в то устройство, куда требуется скопировать данные.
  4. Запустите импортирование из этого файла.

Друзья, вот и все премудрости, о которых я хотел вам сегодня поведать. Если что-то непонятно, задавайте вопросы в комментариях. До свидания.

Читайте также: