Как excel портит csv

Время на прочтение
5 мин

Количество просмотров 197K

Продукты HFLabs в промышленных объемах обрабатывают данные: адреса, ФИО, реквизиты компаний и еще вагон всего. Естественно, тестировщики ежедневно с этими данными имеют дело: обновляют тест-кейсы, изучают результаты очистки. Часто заказчики дают «живую» базу, чтобы тестировщик настроил сервис под нее.

Первое, чему мы учим новых QA — сохранять данные в первозданном виде. Все по заветам: «Не навреди». В статье я расскажу, как аккуратно работать с CSV-файлами в Excel и Open Office. Советы помогут ничего не испортить, сохранить информацию после редактирования и в целом чувствовать себя увереннее.

Материал базовый, профессионалы совершенно точно заскучают.

Что такое CSV-файлы

Формат CSV используют, чтобы хранить таблицы в текстовых файлах. Данные очень часто упаковывают именно в таблицы, поэтому CSV-файлы очень популярны.


CSV-файл состоит из строк с данными и разделителей, которые обозначают границы столбцов

CSV расшифровывается как comma-separated values — «значения, разделенные запятыми». Но пусть название вас не обманет: разделителями столбцов в CSV-файле могут служить и точки с запятой, и знаки табуляции. Это все равно будет CSV-файл.

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

Из-за своих преимуществ CSV — сверхпопулярный формат обмена данными, хотя ему уже лет 40. CSV используют прикладные промышленные программы, в него выгружают данные из баз.

Одна беда — текстового редактора для работы с CSV мало. Еще ничего, если таблица простая: в первом поле ID одной длины, во втором дата одного формата, а в третьем какой-нибудь адрес. Но когда поля разной длины и их больше трех, начинаются мучения.


Следить за разделителями и столбцами — глаза сломаешь

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

Поэтому CSV-файлы анализируют и редактируют в Excel и аналогах: Open Office, LibreOffice и прочих.

Ветеранам, которые все же дочитали: ребята, мы знаем об анализе непосредственно в БД c помощью SQL, знаем о Tableau и Talend Open Studio. Это статья для начинающих, а на базовом уровне и небольшом объеме данных Excel с аналогами хватает.

Как Excel портит данные: из классики

Все бы ничего, но Excel, едва открыв CSV-файл, начинает свои лукавые выкрутасы. Он без спроса меняет данные так, что те приходят в негодность. Причем делает это совершенно незаметно. Из-за этого в свое время мы схватили ворох проблем.

Большинство казусов связано с тем, что программа без спроса преобразует строки с набором цифр в числа.

Округляет. Например, в исходной ячейке два телефона хранятся через запятую без пробелов: «5235834,5235835». Что сделает Excel? Лихо превратит номера́ в одно число и округлит до двух цифр после запятой: «5235834,52». Так мы потеряем второй телефон.

Приводит к экспоненциальной форме. Excel заботливо преобразует «123456789012345» в число «1,2E+15». Исходное значение потеряем напрочь.

Проблема актуальна для длинных, символов по пятнадцать, цифровых строк. Например, КЛАДР-кодов (это такой государственный идентификатор адресного объекта: го́рода, у́лицы, до́ма).

Удаляет лидирующие плюсы. Excel считает, что плюс в начале строки с цифрами — совершенно лишний символ. Мол, и так ясно, что число положительное, коль перед ним не стоит минус. Поэтому лидирующий плюс в номере «+74955235834» будет отброшен за ненадобностью — получится «74955235834». (В реальности номер пострадает еще сильнее, но для наглядности обойдусь плюсом).

Потеря плюса критична, например, если данные пойдут в стороннюю систему, а та при импорте жестко проверяет формат.

Разбивает по три цифры. Цифровую строку длиннее трех символов Excel, добрая душа, аккуратно разберет. Например, «8 495 5235834» превратит в «84 955 235 834».

Форматирование важно как минимум для телефонных номеров: пробелы отделяют коды страны и города от остального номера и друг от друга. Excel запросто нарушает правильное членение телефона.

Удаляет лидирующие нули. Строку «00523446» Excel превратит в «523446».
А в ИНН, например, первые две цифры — это код региона. Для Республики Алтай он начинается с нуля — «04». Без нуля смысл номера исказится, а проверку формата ИНН вообще не пройдет.

Меняет даты под локальные настройки. Excel с удовольствием исправит номер дома «1/2» на «01.фев». Потому что Windows подсказал, что в таком виде вам удобнее считывать даты.

Побеждаем порчу данных правильным импортом

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

По умолчанию Excel применяет к данным в загруженном CSV-файле тип «General» — общий. Из-за него программа распознает цифровые строки как числа. Такой порядок можно победить, используя встроенный инструмент импорта.

Запускаю встроенный в Excel механизм импорта. В меню это «Data → Get External Data → From Text».

Выбираю CSV-файл с данными, открывается диалог. В диалоге кликаю на тип файла Delimited (с разделителями). Кодировка — та, что в файле, обычно определяется автоматом. Если первая строка файла — шапка, отмечаю «My Data Has Headers».

Перехожу ко второму шагу диалога. Выбираю разделитель полей (обычно это точка с запятой — semicolon). Отключаю «Treat consecutive delimiters as one», а «Text qualifier» выставляю в «{none}». (Text qualifier — это символ начала и конца текста. Если разделитель в CSV — запятая, то text qualifier нужен, чтобы отличать запятые внутри текста от запятых-разделителей.)

На третьем шаге выбираю формат полей, ради него все и затевалось. Для всех столбцов выставляю тип «Text». Кстати, если кликнуть на первую колонку, зажать шифт и кликнуть на последнюю, выделятся сразу все столбцы. Удобно.

Дальше Excel спросит, куда вставлять данные из CSV — можно просто нажать «OK», и данные появятся в открытом листе.


Перед импортом придется создать в Excel новый workbook

Но! Если я планирую добавлять данные в CSV через Excel, придется сделать еще кое-что.

После импорта нужно принудительно привести все-все ячейки на листе к формату «Text». Иначе новые поля приобретут все тот же тип «General».

  • Нажимаю два раза Ctrl+A, Excel выбирает все ячейки на листе;
  • кликаю правой кнопкой мыши;
  • выбираю в контекстном меню «Format Cells»;
  • в открывшемся диалоге выбираю слева тип данных «Text».


Чтобы выделить все ячейки, нужно нажать Ctrl+A два раза. Именно два, это не шутка, попробуйте

После этого, если повезет, Excel оставит исходные данные в покое. Но это не самая твердая гарантия, поэтому мы после сохранения обязательно проверяем файл через текстовый просмотрщик.

Альтернатива: Open Office Calc

Для работы с CSV-файлами я использую именно Calc. Он не то чтобы совсем не считает цифровые данные строками, но хотя бы не применяет к ним переформатирование в соответствии с региональными настройками Windows. Да и импорт попроще.

Конечно, понадобится пакет Open Office (OO). При установке он предложит переназначить на себя файлы MS Office. Не рекомендую: хоть OO достаточно функционален, он не до конца понимает хитрое микрософтовское форматирование документов.

А вот назначить OO программой по умолчанию для CSV-файлов — вполне разумно. Сделать это можно после установки пакета.

Итак, запускаем импорт данных из CSV. После двойного клика на файле Open Office показывает диалог.


Заметьте, в OO не нужно создавать новый воркбук и принудительно запускать импорт, все само

  1. Кодировка — как в файле.
  2. «Разделитель» — точка с запятой. Естественно, если в файле разделителем выступает именно она.
  3. «Разделитель текста» — пустой (все то же, что в Excel).
  4. В разделе «Поля» кликаю в левый-верхний квадрат таблицы, подсвечиваются все колонки. Указываю тип «Текст».

Штука, которая испортила немало крови: если по ошибке выбрать несколько разделителей полей или не тот разделитесь текста, файл может правильно открыться, но неправильно сохраниться.

Помимо Calc у нас в HFLabs популярен libreOffice, особенно под «Линуксом». И то, и другое для CSV применяют активнее, чем Excel.

Бонус-трек: проблемы при сохранении из Calc в .xlsx

Если сохраняете данные из Calc в экселевский формат .xlsx, имейте в виду — OO порой необъяснимо и масштабно теряет данные.


Белая пустошь, раскинувшаяся посередине, в оригинальном CSV-файле богато заполнена данными

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

Если что-то потерялись, лечение — пересохранить из CSV в .xlsx. Или, если установлен Windows, импортнуть из CSV в Excel и сохранить оттуда.

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

Если интересно работать с данными, посмотрите на наши вакансии. HFLabs почти всегда нужны аналитики, тестировщики, инженеры по внедрению, разработчики. Данными обеспечим так, что мало не покажется :)

Содержание

  1. Язвы и грабли CSV и Excel: проблемы и решения
  2. Csv какой разделитель
  3. Язвы и грабли CSV и Excel: проблемы и решения
  4. CSV с запятой или точкой с запятой?
  5. 10 ответов
  6. Импорт содержимого CSV-файла в Excel
  7. Открываем CSV-файлы
  8. Метод 1: двойным щелчком или через контекстное меню
  9. Метод 2: применяем Мастер текстов
  10. Метод 3: через меню “Файл”
  11. Заключение

Язвы и грабли CSV и Excel: проблемы и решения

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

История этого формата насчитывает не менее 30 лет. Но даже сейчас, в эпоху повального использования XML, для выгрузки и загрузки больших объемов данных по-прежнему используют CSV. И, несмотря на то, что сам формат довольно неплохо описан в RFC, каждый его понимает по-своему.

В этой статье я попробую обобщить существующие знания об этом формате, указать на типичные ошибки, а также проиллюстрировать описанные проблемы на примере кривой реализации импорта-экспорта в Microsoft Office 2007. Также покажу, как обходить эти проблемы (в т.ч. автоматическое преобразование типов Excel-ом в DATETIME и NUMBER) при открытии .csv.

Начнем с того, что форматом CSV на самом деле называют три разных текстовых формата, отличающихся символами-разделителями: собственно сам CSV (comma-separated values — значения, разделенные запятыми), TSV (tab-separated values — значения, разделенные табуляциями) и SCSV (semicolon separated values — значения, разделенные точкой с запятой). В жизни все три могут называться одним CSV, символ-разделитель в лучшем случае выбирается при экспорте или импорте, а чаще его просто «зашивают» внутрь кода. Это создает массу проблем в попытке разобраться.

Как иллюстрацию возьмем казалось бы тривиальную задачу: импортировать в Microsoft Outlook данные из таблицы в Microsoft Excel.

В Microsoft Excel есть средства экспорта в CSV, а в Microsoft Outlook — соответствующие средства импорта. Что могло быть проще — сделал файлик, «скормил» почтовой программе и — дело сделано? Как бы не так.

Создадим в Excel тестовую табличку:

… и попробуем экспортировать ее в три текстовых формата:

«Текст Unicode» Кодировка — UTF-16, разделители — табуляция, переводы строк — 0×0D, 0×0A, объем файла — 222 байт
«CSV (разделители — запятые)» Кодировка — Windows-1251, разделители — точка с запятой (не запятая!), во второй строке значение телефонов не взято в кавычки, несмотря на запятую, зато взято в кавычки значение «01;02», что правильно. Переводы строк — 0×0D, 0×0A. Объем файла — 110 байт
«Текстовые файлы (с разделителями табуляции)» Кодировка — Windows-1251, разделители — табуляция, переводы строк — 0×0D, 0×0A. Значение «01;02» помещено в кавычки (без особой нужды). Объем файла — 110 байт

Какой вывод мы делаем из этого. То, что здесь Microsoft называет «CSV (разделители — запятые)», на самом деле является форматом с разделителями «точка с запятой». Формат у Microsoft — строго Windows-1251. Поэтому, если у вас в Excel есть Unicode-символы, они на выходе в CSV отобразятся в вопросительные знаки. Также то, что переводами строк является всегда пара символов, то, что Microsoft тупо берет в кавычки все, где видит точку с запятой. Также то, что если у вас нет Unicode-символов вообще, то можно сэкономить на объеме файла. Также то, что Unicode поддерживается только UTF-16, а не UTF-8, что было бы сильно логичнее.

Теперь посмотрим, как на это смотрит Outlook. Попробуем импортировать эти файлы из него, указав такие же источники данных. Outlook 2007: Файл -> Импорт и экспорт… -> Импорт из другой программы или файла. Далее выбираем формат данных: «Значения, разделенные запятыми (Windows)» и «Значения, разделенные табуляцией (Windows)».

«Значения, разделенные табуляцией(Windows)» Скармливаем аутлуку файл tsv, с разделенными табуляцией значениями и. — чтобы вы думали. Outlook склеивает поля и табуляцию не замечает. Заменяем в файле табуляцию на запятые и, как видим, поля уже разбирает, молодец.
«Значения, разделенные запятыми (Windows)» А вот аутлук как раз понимает все верно. Comma — это запятая. Поэтому ожидает в качестве разделителя запятую. А у нас после экселя — точка с запятой. В итоге аутлук распознает все неверно.

Два майкрософтовских продукта не понимают друг друга, у них напрочь отсутствует возможность передать через текстовый файл структурированные данные. Для того, чтобы все заработало, требуются «пляски с бубном» программиста.

Мы помним, что Microsoft Excel умеет работать с текстовыми файлами, импортировать данные из CSV, но в версии 2007 он делает это очень странно. Например, если просто открыть файл через меню, то он откроется без какого-либо распознавания формата, просто как текстовый файл, целиком помещенный в первую колонку. В случае, если сделать дабл-клик на CSV, Excel получает другую команду и импортирует CSV как надо, не задавая лишних вопросов. Третий вариант — вставка файла на текущий лист. В этом интерфейсе можно настраивать разделители, сразу же смотреть, что получилось. Но одно но: работает это плохо. Например, Excel при этом не понимает закавыченных переводов строк внутри полей.

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

Стандарта CSV как такового, к сожалению, нет, но, между тем, существует т.н. memo. Это RFC 4180 года, в котором описано все довольно толково. За неимением ничего большего, правильно придерживаться хотя бы RFC. Но для совместимости с Excel следует учесть его собенности.

Вот краткая выжимка рекомендаций RFC 4180 и мои комментарии в квадратных скобках:

  • между строками — перевод строки CRLF [на мой взгляд, им не стоило ограничивать двумя байтами, т.е. как CRLF (0×0D, 0×0A), так и CR 0×0D]
  • разделители — запятые, в конце строки не должно быть запятой,
  • в последней строке CRLF не обязателен,
  • первая строка может быть строкой заголовка (никак не помечается при этом)
  • пробелы, окружающие запятую-разделитель, игнорируются.
  • если значение содержит в себе CRLF, CR, LF (символы-разделители строк), двойную кавычку или запятую (символ-разделитель полей), то заключение значения в кавычки обязательно. В противном случае — допустимо.
  • т.е. допустимы переводы строк внутри поля. Но такие значения полей должны быть обязательно закавычены,
  • если внутри закавыченной части встречаются двойные кавычки, то используется специфический квотинг кавычек в CSV — их дублирование.

Вот в нотации ABNF описание формата:

Также при реализации формата нужно помнить, что поскольку здесь нет указателей на число и тип колонок, поскольку нет требования обязательно размещать заголовок, здесь есть условности, о которых необходимо не забывать:

  • строковое значение из цифр, не заключенное в кавычки может быть воспринято программой как числовое, из-за чего может быть потеряна информация, например, лидирующие нули,
  • количество значений в каждой строке может отличаться и необходимо правильно обрабатывать эту ситуацию. В одних ситуациях нужно предупредить пользователя, в других — создавать дополнительные колонки и заполнять их пустыми значениями. Можно определиться, что количество колонок задается заголовком, а можно добавлять их динамически, по мере импорта CSV,
  • Квотить кавычки через «слэш» не по стандарту, делать так не надо.
  • Поскольку типизации полей нет, нет и требования к ним. Разделители целой и дробной частей в разных странах разные, и это приводит к тому, что один и тот же CSV, сгенрированный приложением, в одном экселе «понимается», в другом — нет. Потому что Microsoft Office ориентируется на региональные настройки Windows, а там может быть что угодно. В России там указано, что разделитель — запятая,
  • Если CSV открывать не через меню «Данные», а напрямую, то Excel лишних вопросов не задает, и делает как ему кажется правильным. Например, поле со значением 1.24 он понимает по умолчанию как «24 января»
  • Эксель убивает ведующие нули и приводит типы даже тогда, когда значение указано в кавычках. Делать так не надо, это ошибка. Но чтобы обойти эту проблему экселя, можно сделать небольшой «хак» — значение начать со знака «равно», после чего поставить в кавычках то, что необходимо передать без изменения формата.
  • У экселя есть спецсимвол «равно», который в CSV рассматривается как идентификатор формулы. То есть, если в CSV встретится =2+3, он сложит два и три и результат впишет в ячейку. По стандарту он это делать не должен.

Пример валидного CSV, который можно использовать для тестов:

точно такой же SCSV:

Первый файлик, который реально COMMA-SEPARATED, будучи сохраненным в .csv, Excel-ом не воспринимается вообще.

Второй файлик, который по логике SCSV, экселом воспринимается и выходит вот что:

Ошибки Excel-я при импорте:

  1. Учлись пробелы, окружающие разделители
  2. Последний столбец вообще толком не распознался, несмотря на то, что данные в кавычках. Исключение составляет строка с «Петровым» — там корректно распозналось 1,24.
  3. В поле индекс Excel «опустил» ведущие нули.
  4. в самом правом поле последней строки пробелы перед кавычками перестали указывать на спецсимвол

Если же воспользоваться функционалом импорта (Данные -> Из файла) и обозвать при импорте все поля текстовыми, то будет следующая картина:

С приведением типов сработало, но зато теперь не обрабатываются нормально переводы строк и осталась проблема с ведущими нулями, кавычками и лишними пробелами. Да и пользователям так открывать CSV крайне неудобно.

Есть эффективный способ, как заставить Excel не приводить типы, когда это нам не нужно. Но это будет CSV «специально для Excel». Делается это помещением знака «=» перед кавычками везде, где потенциально может возникнуть проблема с типами. Заодно убираем лишние пробелы.

И вот что случаеся, если мы открываем этот файлик в экселе:

Чтобы сгенерировать такой CSV, которым можно было бы пользоваться, пользователю нужно дать возможность сделать следующие настройки перед экспортом:

  1. выбрать кодировку. Как правило, важно UTF-8, UTF-16, Windows-1251, KOI8-R. Чаще всего, других вариантов нет. Одна из них должна идти по умолчанию. В случае, если данные содержат символы, не имеющие аналогов в целевой кодировке, нужно предупреждать пользователя, что данные будут битые;
  2. выбрать разделитель между полями. Варианты — табуляция, запятая, точка с запятой. По умолчанию — точка с запятой. Не забыть, что если разделитель вводится в тексте, то будет очень непросто ввести туда табуляцию, это еще и непечатный символ;
  3. выбрать разделитель между строками (CRLF 0×0D 0×0A или CR 0×0D);
  4. выбрать разделитель целой и дробной части для числовых данных (точка или запятая).
  5. выбрать, выводить ли строку заголовка;
  6. выбрать, каким образом осуществлять квотинг спецсимволов (особенно переводов строк и кавычек). В принципе, можно отступиться от стандарта и квотировать их как n и », но нужно в этом случае не забыть квотировать сами n, если они встретятся и не забыть сделать это опцией при экспорте-импорте. Но совместимость пойдет лесом, потому что любой RFC-стандартный парсер конструкцию . «abc«»,… посчитает за ошибку;
  7. совсем в идеале — поставить галочку «для Excel» и учитывать там те нестандартности, которые внесла Майкрософт. К примеру, заменять значения числовых полей, «похожих на дату», на конструкцию =» «.
  8. определиться, нужно ли оставлять «хвост» из пустых разделителей, если он образуется. Например, из 20 полей только первое содержит данные, а остальные пустые. В итоге, в строке можно либо ставить после первого 19 разделителей, либо не ставить. Для больших объемов данных это может спасти миллисекунды обработки и уменьшить размер файла.

Чтобы построить хороший и удобный импортер CSV, необходимо помнить о следующем:

  1. разбор файла нужно делать по лексемам в соответствии с грамматикой выше или пользоваться хорошо зарекомендовавшими себя готовыми библиотеками (Excel работает иначе, потому с импортом проблема);
  2. предоставлять пользователю возможность выбрать кодировку (топ 4 достаточно);
  3. предоставлять пользователю возможность выбрать разделитель между полями (запятая, табуляция, точка с запятой достаточно);
  4. предоставлять пользователю возможность выбрать разделитель между строками, но кроме вариантов CR и CRLF нужно предусмотреть «CR или CRLF». Это связано с тем, что, например, Excel при экспорте таблицы с переводами строк внутри ячеек экспортирует эти переводы строк как CR, а остальные строки разделяет CRLF. При этом при импорте файла ему все равно, CR там или CRLF;
  5. предоставлять пользователю возможность выбрать разделитель между целой и дробной частей (запятая или точка);
  6. определиться с методом разбора — сначала читаем все в память, потом обрабатываем или обрабатываем строку за строкой. В первом случае может понадобиться больше памяти, во втором случае — ошибка в середине вызовет только частичный импорт, что может вызвать проблемы. Предпочительнее первый вариант.

Источник

Csv какой разделитель

Язвы и грабли CSV и Excel: проблемы и решения

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

История этого формата насчитывает не менее 30 лет. Но даже сейчас, в эпоху повального использования XML, для выгрузки и загрузки больших объемов данных по-прежнему используют CSV. И, несмотря на то, что сам формат довольно неплохо описан в RFC, каждый его понимает по-своему.

В этой статье я попробую обобщить существующие знания об этом формате, указать на типичные ошибки, а также проиллюстрировать описанные проблемы на примере кривой реализации импорта-экспорта в Microsoft Office 2007. Также покажу, как обходить эти проблемы (в т.ч. автоматическое преобразование типов Excel-ом в DATETIME и NUMBER) при открытии .csv.

Начнем с того, что форматом CSV на самом деле называют три разных текстовых формата, отличающихся символами-разделителями: собственно сам CSV (comma-separated values — значения, разделенные запятыми), TSV (tab-separated values — значения, разделенные табуляциями) и SCSV (semicolon separated values — значения, разделенные точкой с запятой). В жизни все три могут называться одним CSV, символ-разделитель в лучшем случае выбирается при экспорте или импорте, а чаще его просто «зашивают» внутрь кода. Это создает массу проблем в попытке разобраться.

Как иллюстрацию возьмем казалось бы тривиальную задачу: импортировать в Microsoft Outlook данные из таблицы в Microsoft Excel.

В Microsoft Excel есть средства экспорта в CSV, а в Microsoft Outlook — соответствующие средства импорта. Что могло быть проще — сделал файлик, «скормил» почтовой программе и — дело сделано? Как бы не так.

Создадим в Excel тестовую табличку:

… и попробуем экспортировать ее в три текстовых формата:

«Текст Unicode» Кодировка — UTF-16, разделители — табуляция, переводы строк — 0×0D, 0×0A, объем файла — 222 байт
«CSV (разделители — запятые)» Кодировка — Windows-1251, разделители — точка с запятой (не запятая!), во второй строке значение телефонов не взято в кавычки, несмотря на запятую, зато взято в кавычки значение «01;02», что правильно. Переводы строк — 0×0D, 0×0A. Объем файла — 110 байт
«Текстовые файлы (с разделителями табуляции)» Кодировка — Windows-1251, разделители — табуляция, переводы строк — 0×0D, 0×0A. Значение «01;02» помещено в кавычки (без особой нужды). Объем файла — 110 байт

Какой вывод мы делаем из этого. То, что здесь Microsoft называет «CSV (разделители — запятые)», на самом деле является форматом с разделителями «точка с запятой». Формат у Microsoft — строго Windows-1251. Поэтому, если у вас в Excel есть Unicode-символы, они на выходе в CSV отобразятся в вопросительные знаки. Также то, что переводами строк является всегда пара символов, то, что Microsoft тупо берет в кавычки все, где видит точку с запятой. Также то, что если у вас нет Unicode-символов вообще, то можно сэкономить на объеме файла. Также то, что Unicode поддерживается только UTF-16, а не UTF-8, что было бы сильно логичнее.

Теперь посмотрим, как на это смотрит Outlook. Попробуем импортировать эти файлы из него, указав такие же источники данных. Outlook 2007: Файл -> Импорт и экспорт… -> Импорт из другой программы или файла. Далее выбираем формат данных: «Значения, разделенные запятыми (Windows)» и «Значения, разделенные табуляцией (Windows)».

«Значения, разделенные табуляцией(Windows)» Скармливаем аутлуку файл tsv, с разделенными табуляцией значениями и. — чтобы вы думали. Outlook склеивает поля и табуляцию не замечает. Заменяем в файле табуляцию на запятые и, как видим, поля уже разбирает, молодец.
«Значения, разделенные запятыми (Windows)» А вот аутлук как раз понимает все верно. Comma — это запятая. Поэтому ожидает в качестве разделителя запятую. А у нас после экселя — точка с запятой. В итоге аутлук распознает все неверно.

Два майкрософтовских продукта не понимают друг друга, у них напрочь отсутствует возможность передать через текстовый файл структурированные данные. Для того, чтобы все заработало, требуются «пляски с бубном» программиста.

Мы помним, что Microsoft Excel умеет работать с текстовыми файлами, импортировать данные из CSV, но в версии 2007 он делает это очень странно. Например, если просто открыть файл через меню, то он откроется без какого-либо распознавания формата, просто как текстовый файл, целиком помещенный в первую колонку. В случае, если сделать дабл-клик на CSV, Excel получает другую команду и импортирует CSV как надо, не задавая лишних вопросов. Третий вариант — вставка файла на текущий лист. В этом интерфейсе можно настраивать разделители, сразу же смотреть, что получилось. Но одно но: работает это плохо. Например, Excel при этом не понимает закавыченных переводов строк внутри полей.

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

Стандарта CSV как такового, к сожалению, нет, но, между тем, существует т.н. memo. Это RFC 4180 года, в котором описано все довольно толково. За неимением ничего большего, правильно придерживаться хотя бы RFC. Но для совместимости с Excel следует учесть его собенности.

Вот краткая выжимка рекомендаций RFC 4180 и мои комментарии в квадратных скобках:

  • между строками — перевод строки CRLF [на мой взгляд, им не стоило ограничивать двумя байтами, т.е. как CRLF (0×0D, 0×0A), так и CR 0×0D]
  • разделители — запятые, в конце строки не должно быть запятой,
  • в последней строке CRLF не обязателен,
  • первая строка может быть строкой заголовка (никак не помечается при этом)
  • пробелы, окружающие запятую-разделитель, игнорируются.
  • если значение содержит в себе CRLF, CR, LF (символы-разделители строк), двойную кавычку или запятую (символ-разделитель полей), то заключение значения в кавычки обязательно. В противном случае — допустимо.
  • т.е. допустимы переводы строк внутри поля. Но такие значения полей должны быть обязательно закавычены,
  • если внутри закавыченной части встречаются двойные кавычки, то используется специфический квотинг кавычек в CSV — их дублирование.

Вот в нотации ABNF описание формата:

Также при реализации формата нужно помнить, что поскольку здесь нет указателей на число и тип колонок, поскольку нет требования обязательно размещать заголовок, здесь есть условности, о которых необходимо не забывать:

  • строковое значение из цифр, не заключенное в кавычки может быть воспринято программой как числовое, из-за чего может быть потеряна информация, например, лидирующие нули,
  • количество значений в каждой строке может отличаться и необходимо правильно обрабатывать эту ситуацию. В одних ситуациях нужно предупредить пользователя, в других — создавать дополнительные колонки и заполнять их пустыми значениями. Можно определиться, что количество колонок задается заголовком, а можно добавлять их динамически, по мере импорта CSV,
  • Квотить кавычки через «слэш» не по стандарту, делать так не надо.
  • Поскольку типизации полей нет, нет и требования к ним. Разделители целой и дробной частей в разных странах разные, и это приводит к тому, что один и тот же CSV, сгенрированный приложением, в одном экселе «понимается», в другом — нет. Потому что Microsoft Office ориентируется на региональные настройки Windows, а там может быть что угодно. В России там указано, что разделитель — запятая,
  • Если CSV открывать не через меню «Данные», а напрямую, то Excel лишних вопросов не задает, и делает как ему кажется правильным. Например, поле со значением 1.24 он понимает по умолчанию как «24 января»
  • Эксель убивает ведующие нули и приводит типы даже тогда, когда значение указано в кавычках. Делать так не надо, это ошибка. Но чтобы обойти эту проблему экселя, можно сделать небольшой «хак» — значение начать со знака «равно», после чего поставить в кавычках то, что необходимо передать без изменения формата.
  • У экселя есть спецсимвол «равно», который в CSV рассматривается как идентификатор формулы. То есть, если в CSV встретится =2+3, он сложит два и три и результат впишет в ячейку. По стандарту он это делать не должен.

Пример валидного CSV, который можно использовать для тестов:

точно такой же SCSV:

Первый файлик, который реально COMMA-SEPARATED, будучи сохраненным в .csv, Excel-ом не воспринимается вообще.

Второй файлик, который по логике SCSV, экселом воспринимается и выходит вот что:

  1. Учлись пробелы, окружающие разделители
  2. Последний столбец вообще толком не распознался, несмотря на то, что данные в кавычках. Исключение составляет строка с «Петровым» — там корректно распозналось 1,24.
  3. В поле индекс Excel «опустил» ведущие нули.
  4. в самом правом поле последней строки пробелы перед кавычками перестали указывать на спецсимвол

Если же воспользоваться функционалом импорта (Данные -> Из файла) и обозвать при импорте все поля текстовыми, то будет следующая картина:

С приведением типов сработало, но зато теперь не обрабатываются нормально переводы строк и осталась проблема с ведущими нулями, кавычками и лишними пробелами. Да и пользователям так открывать CSV крайне неудобно.

Есть эффективный способ, как заставить Excel не приводить типы, когда это нам не нужно. Но это будет CSV «специально для Excel». Делается это помещением знака «=» перед кавычками везде, где потенциально может возникнуть проблема с типами. Заодно убираем лишние пробелы.

И вот что случаеся, если мы открываем этот файлик в экселе:

  1. выбрать кодировку. Как правило, важно UTF-8, UTF-16, Windows-1251, KOI8-R. Чаще всего, других вариантов нет. Одна из них должна идти по умолчанию. В случае, если данные содержат символы, не имеющие аналогов в целевой кодировке, нужно предупреждать пользователя, что данные будут битые;
  2. выбрать разделитель между полями. Варианты — табуляция, запятая, точка с запятой. По умолчанию — точка с запятой. Не забыть, что если разделитель вводится в тексте, то будет очень непросто ввести туда табуляцию, это еще и непечатный символ;
  3. выбрать разделитель между строками (CRLF 0×0D 0×0A или CR 0×0D);
  4. выбрать разделитель целой и дробной части для числовых данных (точка или запятая).
  5. выбрать, выводить ли строку заголовка;
  6. выбрать, каким образом осуществлять квотинг спецсимволов (особенно переводов строк и кавычек). В принципе, можно отступиться от стандарта и квотировать их как n и », но нужно в этом случае не забыть квотировать сами n, если они встретятся и не забыть сделать это опцией при экспорте-импорте. Но совместимость пойдет лесом, потому что любой RFC-стандартный парсер конструкцию . «abc«»,… посчитает за ошибку;
  7. совсем в идеале — поставить галочку «для Excel» и учитывать там те нестандартности, которые внесла Майкрософт. К примеру, заменять значения числовых полей, «похожих на дату», на конструкцию v-portal» style=»display:none;»>

CSV с запятой или точкой с запятой?

Как файл CSV построен в целом? Запятыми или точками с запятой? Есть советы, какой из них использовать?

10 ответов

в Windows это зависит от» региональные и языковые параметры » настроить экран, где вы найдете разделитель списка. Это char Windows приложения ожидают, чтобы быть разделителем CSV.

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

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

Я бы сказал, придерживайтесь запятой, поскольку она широко признана и понята. Не забудьте указать свои значения и избежать ваших котировок, хотя.

CSV-это стандартный формат, описанный в RFC 4180 (в 2005 году), поэтому нет недостатка в стандарте. https://www.ietf.org/rfc/rfc4180.txt

и даже до этого C в CSV всегда означал запятую, а не точку с запятой : (

жаль, что Microsoft продолжает игнорировать это и по-прежнему придерживается чудовищности, в которую они превратили его десятилетия назад (да, я признаю, что это было до создания RFC).

  • одна запись на строку, если a новая строка возникает в кавычках (см. ниже).
  • запятая как разделитель столбцов. Никогда точка с запятой.
  • период как десятичная точка в числах. Ни одной запятой.
  • текст, содержащий запятые, точки и/или строки заключены в «двойные кавычки».

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

1, «этот текст содержит «»кавычки»»», 3

1, этот текст содержит «кавычки», 3

стандарт не охватывает значения даты и времени, лично я стараюсь придерживаться формата ISO 8601, чтобы избежать путаницы день/месяц/год-месяц/день/год.

также актуально, но специально для excel, посмотрите на ответ и этот это предполагает, вставив строку в начале CSV с

сообщить excel, какой разделитель ожидать

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

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

Что касается консультирования вас о том, что использовать, мы должны знать ваше приложение. Этот файл специфичен для вашего приложения/программы, или это необходимо для работы с другими программами?

1.> Изменить формат файла на .CSV (точка с запятой)

для достижения желаемого результата нам необходимо временно изменить delimiter настройка в Excel варианты:

снимите флажок» Использовать системные разделители «и поставьте запятую в поле» десятичный разделитель».

теперь сохраните файл в папке .CSV формат, и он будет сохранен в формате с запятой.

чтобы изменить запятую на точку с запятой в качестве разделителя Excel по умолчанию для CSV-перейдите в регион — > дополнительные настройки — > вкладка номера — > разделитель списка и введите ; вместо значения по умолчанию

ну, чтобы просто сказать о точке с запятой. Во многих странах запятая-это то, что используется для десятичного периода. В основном колонии ЕС, которые состоят из половины мира, другая половина следуют британскому стандарту (как, черт возьми, Великобритания так велика O_O), поэтому, в свою очередь, используют запятую для базы данных, которые включают номер, создают большую часть головной боли, потому что Excel отказывается признать его в качестве разделителя.

как мудрый в моей стране, Вьетнам, следовать стандартом Франции, нашим стандартом Великобритании пользы Гонконга партнера так запятая делает CSV непригодным, и мы используем t или ; вместо этого для международного использования, но он все еще не «стандарт» для документа CSV.

Импорт содержимого CSV-файла в Excel

CSV – популярное расширение файлов, которые используются, в основном, для обмена данными между различными компьютерными программами. Чаще всего необходимости в открытии и редактировании таких документов нет. Однако в некоторых случаях перед пользователями может встать такая задача. Программа Excel позволяет это сделать, но в отличие от стандартных файлов в формате XLS и XLSX, простое открытие документа двойным щелчком мыши не всегда дает качественный результат, что может выражаться в некорректном отображении информации. Давайте посмотрим, каким образом можно открыть файлы с расширением CSV в Экселе.

  • Открываем CSV-файлы
    • Метод 1: двойным щелчком или через контекстное меню
    • Метод 2: применяем Мастер текстов
    • Метод 3: через меню “Файл”

    Открываем CSV-файлы

    Для начала давайте разберемся, что из себя представляют документы в данном формате.

    CSV – аббревиатура, которая расшифровывается как “Comma-Separated Values” (на русском языке означает “значения, разделенные запятыми”).

    Как следует из названия, в таких документах используются разделители:

    • запятая – в англоязычных версиях;
    • точка с запятой – в русскоязычных версиях программы.

    Во время открытия документа в Excel основная задача (проблема) заключается в выборе способа кодировки, примененного при сохранении файла. Если будет выбрана не та кодировка, скорее всего, пользователь увидит множество нечитаемых символов, и полезность информации будет сведена к минимуму. Помимо этого, ключевое значение имеет используемый разделитель. Например, если документ был сохранен в англоязычной версии, а затем его пытаются открыть в русскоязычной, скорее всего, качество отображаемой информации пострадает. Причина, как мы ранее отметили, заключается в том, что в разных версиях используются разные разделители. Давайте посмотрим, как избежать этих проблем и как правильно открывать файлы CSV.

    Метод 1: двойным щелчком или через контекстное меню

    Прежде, чем приступить к более сложным методам, давайте рассмотрим самый простой. Он применим только в тех случаях, когда файл был создан/сохранен и открывается в одной и той же версии программы, а значит, проблем с кодировкой и разделителями быть не должно. Здесь возможно два варианта, опишем их ниже.

    Excel установлена как программа по умолчанию для открытия CSV-файлов

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

    Для открытия CSV-фалов назначена другая программа или не назначена вовсе

    Алгоритм действия в таких ситуациях следующий (на примере Windows 10):

      Щелкаем правой кнопкой мыши по файлу и в открывшемся контекстном меню останавливаемся на команде “Открыть с помощью”.

    Независимо от того, какой из описанных выше способов был выбран, результатом будет открытие CSV-файла. Как мы упомянули выше, корректно отображаться содержимое будет только при соответствии кодировки и разделителей.

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

    Поэтому описанный метод подходит не всегда, и мы переходим к следующим.

    Метод 2: применяем Мастер текстов

    Воспользуемся интегрированным в программу инструментом – Мастером текстов:

      Открыв программу и создав новый лист, чтобы получить доступ ко всем функциям и инструментам рабочей среды, переключаемся во вкладку “Данные”, где щелкаем по кнопке “Получение внешних данных”. Среди раскрывшихся вариантов выбираем “Из текста”.

    Метод 3: через меню “Файл”

    И последний метод, которым можно воспользоваться заключается в следующем:

    1. Запустив программу выбираем пункт “Отрыть”.Если программа уже ранее была открыта и ведется работа на определенном листе, переходим в меню “Файл”.Щелкаем по команде “Открыть” в списк команд.
    2. Жмем кнопку “Обзор”, чтобы перейти к окну Проводника.
    3. Выбираем формат “Все файлы”, переходим к месту хранения нашего документа, отмечаем его и щелкаем кнопку “Открыть”.
    4. На экране появится уже знакомый нам Мастер импорта текстов. Далее руководствуемся шагами, описанными в Методе 2.

    Заключение

    Таким образом, несмотря на кажущуюся сложность, программа Эксель вполне позволяет открывать и работать с файлами в формате CSV. Главное – определиться с методом реализации. Если при обычном открытии документа (двойным щелчком мыши или через контекстное меню) его содержимое содержит непонятные символы, можно воспользоваться Мастером текста, который позволяет выбрать подходящую кодировку и знак разделителя, что напрямую влияет на корректность отображаемой информации.

    Источник

Восстановление базы данных из скрипта.

Мы получаем скрипты для генерации структуры БД либо в задании на демо-экзамене, либо формируем из ER-диаграммы. Создание самой БД мы не рассматриваем (ни на демо-экзамене, ни на моем сервере у вас нет на это прав), но там ничего сложного и при желании вы можете установить локальную БД дома и с ней делать что угодно.

Подключение к базе данных (MySQL)

Прежде чем что-то сделать с базой данных нужно к ней подключиться:

Используя MySQL Workbench

  1. Запустите программу MySQL Workbench

  2. На стартовом окне программы кликните по значку «+»

  3. В параметрах подключения заполните поля:

    • Connection name — название подключения. Тут может быть что угодно, но лучше указать свой логин (см. ниже)

    • Host name — IP-адрес или доменное имя сервера. В рамках лабораторных работ мы будем работать на удаленном сервере kolei.ru, на демо-экзамене будет сервер в локальной сети.

    • Username — имя пользователя. Присваивается преподавателем.

    • Store in vault — открывает окно для ввода и СОХРАНЕНИЯ пароля. Дома можете настроить, чтобы каждый раз не вводить пароль, но в классе лучше не использовать.

    • Test connection — тест соединения. Программа запросит пароль и попытается подключиться к серверу используя введенные параметры. Если все параметры введены правильно, то появится окно подтверждения.

      Если при попытке подключения ругается на сертификат, то перейдите в закладку Advanced и в блоке Others напишите строку useSSL=0

    • В окне настроек соединения жмите «OK»

Формирование DDL-скрипта по диаграмме

  1. Окройте EER-диаграмму

  2. Переименуйте (правый клик мышкой) базу данных в соответствии со своим Username (см. выше)

  3. Сформируйте скрипт для создания БД: File -> Export -> Forward Engineer SQL CREATE Script. В окнах настроек и объектов пока всё оставляем по-умолчанию. Скопируйте скрипт в буфер обмена.

  4. Откройте ранее созданное подключение к БД. Обычно при открытии БД одновременно открывается окно Query (запросы). Если его нет, но откройте новое:

  5. Вставьте в окно запросов скрипт из буфера обмена и закомментируйте строку с созданием схемы (у вас нет прав на создание новых схем)

  6. Выполните скрипт

  7. Если всё нормально, то будут созданы все таблицы и связи, которые вы описали в EER

На демо-экзамене в ресурсах будет аналогичный файл скрипта базы данных, но в нём не укзана база данных. Нужно в начале скрипта вписать команду use <название вашей базы>;

Используя dBeaver

dBeaver — кроссплатформенный бесплатный менеджер баз данных (список поддерживаемых БД большой, есть и MySQL и MSSQL)

Создание подключения

В списке проектов открываем пункт General и в контекстном меню пункта Connections выбираем Создать -> Соединение

Создание подключения

В открывшемся окне выберите тип соедиения (используемую БД)

У меня на сервере установлена mysql Ver 14.14 Distrib 5.7.39, for Linux (x86_64), поэтому выбираем MySQL. Если у вас другой тип БД, то выбираете соответсвующий.

Выбор типа БД

В настройках соединения указываем доменное имя или IP сервера, название базы данных и имя пользователя (выдаст преподаватель или сами знаете какие в вашей БД), пароль.

Затем нажимаете тест соединения и, если всё введено правильно, и соединение устанавливается то жмёте Готово

Настройки соединения

В списке соединений появится созданое соединение, название состоит из имени базы и имени сервера и имеющиеся базы данных.

Список соединений

Импорт данных.

Стандартом де-факто для импорта/экспорта данных является формат CSV.

Что такое CSV-файлы

Формат CSV используют, чтобы хранить таблицы в текстовых файлах. Данные очень часто упаковывают именно в таблицы, поэтому CSV-файлы очень популярны.

CSV расшифровывается как comma-separated values — «значения, разделенные запятыми». Но разделителями столбцов в CSV-файле могут служить и точки с запятой, и знаки табуляции. Это все равно будет CSV-файл.

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

Из-за своих преимуществ CSV — сверхпопулярный формат обмена данными, хотя ему уже лет 40. CSV используют прикладные промышленные программы, в него выгружают данные из баз.

Одна беда — текстового редактора для работы с CSV мало. Еще ничего, если таблица простая: в первом поле ID одной длины, во втором дата одного формата, а в третьем какой-нибудь адрес. Но когда поля разной длины и их больше трех, начинаются мучения.

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

Поэтому CSV-файлы анализируют и редактируют в Excel и аналогах: Open Office, LibreOffice и прочих.

Как Excel портит данные: из классики

Все бы ничего, но Excel, едва открыв CSV-файл, начинает свои лукавые выкрутасы. Он без спроса меняет данные так, что те приходят в негодность. Причем делает это совершенно незаметно. Из-за этого в свое время мы схватили ворох проблем.

Большинство казусов связано с тем, что программа без спроса преобразует строки с набором цифр в числа.

Округляет. Например, в исходной ячейке два телефона хранятся через запятую без пробелов: «5235834,5235835». Что сделает Excel? Лихо превратит номера́ в одно число и округлит до двух цифр после запятой: «5235834,52». Так мы потеряем второй телефон.

Приводит к экспоненциальной форме. Excel заботливо преобразует «123456789012345» в число «1,2E+15». Исходное значение потеряем напрочь.

Проблема актуальна для длинных, символов по пятнадцать, цифровых строк. Например, КЛАДР-кодов (это такой государственный идентификатор адресного объекта: го́рода, у́лицы, до́ма).

Удаляет лидирующие плюсы. Excel считает, что плюс в начале строки с цифрами — совершенно лишний символ. Мол, и так ясно, что число положительное, коль перед ним не стоит минус. Поэтому лидирующий плюс в номере «+74955235834» будет отброшен за ненадобностью — получится «74955235834». (В реальности номер пострадает еще сильнее, но для наглядности обойдусь плюсом).

Потеря плюса критична, например, если данные пойдут в стороннюю систему, а та при импорте жестко проверяет формат.

Разбивает по три цифры. Цифровую строку длиннее трех символов Excel, добрая душа, аккуратно разберет. Например, «8 495 5235834» превратит в «84 955 235 834».

Форматирование важно как минимум для телефонных номеров: пробелы отделяют коды страны и города от остального номера и друг от друга. Excel запросто нарушает правильное членение телефона.

Удаляет лидирующие нули. Строку «00523446» Excel превратит в «523446».
А в ИНН, например, первые две цифры — это код региона. Для Республики Алтай он начинается с нуля — «04». Без нуля смысл номера исказится, а проверку формата ИНН вообще не пройдет.

Меняет даты под локальные настройки. Excel с удовольствием исправит номер дома «1/2» на «01.фев». Потому что Windows подсказал, что в таком виде вам удобнее считывать даты.

Побеждаем порчу данных правильным импортом

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

По умолчанию Excel применяет к данным в загруженном CSV-файле тип «General» — общий. Из-за него программа распознает цифровые строки как числа. Такой порядок можно победить, используя встроенный инструмент импорта.

Запускаем встроенный в Excel механизм импорта.

Выбирем CSV-файл с данными, открывается диалог. В диалоге кликем на тип файла Delimited (с разделителями). Кодировка — та, что в файле, обычно определяется автоматом. Если первая строка файла — шапка, отмечем «My Data Has Headers».

Переходим ко второму шагу диалога. Выбираем разделитель полей (обычно это запятая). Отключаем «Treat consecutive delimiters as one», а «Text qualifier» выставляем в «{none}». (Text qualifier — это символ начала и конца текста. Если разделитель в CSV — запятая, то text qualifier нужен, чтобы отличать запятые внутри текста от запятых-разделителей.)

На третьем шаге выбираем формат полей, ради него все и затевалось. Для всех столбцов выставляем тип «Text». Кстати, если кликнуть на первую колонку, зажать шифт и кликнуть на последнюю, выделятся сразу все столбцы. Удобно.

Дальше Excel спросит, куда вставлять данные из CSV — можно просто нажать «OK», и данные появятся в открытом листе.

Но! Если мы планируем экспортировать данные в CSV из Excel, придется сделать еще кое-что.

После импорта нужно принудительно привести все-все ячейки на листе к формату «Text». Иначе новые поля приобретут все тот же тип «General».

  • Нажимаем два раза Ctrl+A, Excel выбирает все ячейки на листе;
  • кликаем правой кнопкой мыши;
  • выбираем в контекстном меню «Format Cells»;
  • в открывшемся диалоге выбираем слева тип данных «Text».

Разбор импорта данных на примере прошлогоднего демо-экзамена

Файлы, используемые в этом разборе, лежат в каталоге data этого репозитория (variant1.zip и variant2.zip)

Создание таблиц из скрипта

  1. Откройте соединение с БД

  2. Откройте вкладку SQL-скрипта, если её ещё нет

  3. Скопируйте в буфер обмена содержимое файла my.sql (на демо-экзамене в ресурсах будет два файла: my.sql для MySQL и ms.sql для MSSQL) и вставьте его во вкладку SQL-скрипта, открытую в предыдущем пункте.

  4. Добавьте в начало скрипта команду USE <название вашей базы данных>; (обращаю внимание, в MySQL команды должны завершаться точкой с запятой) и выполните скрипт (кликните по значку молнии)

    После выполнения скрипта в вашей БД должны появиться новые таблицы (пустые)

Импорт данных

В ресурсах у нас есть три файла для импорта:

  • materials_short_k_import.txt
  • products_k_import.csv
  • productmaterial_k_import.xlsx

При реальной разработке вам придется самостоятельно разбираться в какую таблицу импортировать данные, но в рамках демо-экзамена имена импортируемых файлов обычно соответсвуют таблицам БД

Импорт материалов

Процесс импорта состоит из нескольких этапов:

  • подготовка данных
  • импорт во временную таблицу
  • перенос данных из временной таблицы в нужную таблицу(ы)
Подготовка данных
  1. Открываем Excel

  2. Открываем или импортируем файл с исходными данными

    Файл материалов у нас в формате TXT. Такой формат напрямую из Excel открыть нельзя — загружайте через импорт данных (в разных версиях Excel меню может называться по-разному)

    • Выберите файл для импорта

      В мастере импорта на первом шаге выберите правильную кодировку (в предварительном просмотре должен быть читаемый текст) и поставьте, если нужно, галочку «мои данные содержат заголовки»

    • Выберите разделитель (обычно используется запятая или точка с запятой, но могут втретиться и более экзотические символы)

  3. Правка данных

    После импорта данных смотрим всё-ли нормально с данными (Смотрим на структуру БД и просто включаем логику). В этой таблице в колонке «стоимость» явно лишние слова «руб.» и «рублей»

    • выделяем редактируемую колонку

    • открываем диалог «Найти и заменить» (Ctrl+F)

      и вырезаем всё лишнее

    • меняем формат ячейки на «числовой»

      Видим, что некоторые строки не распознались как числа.

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

    • в одном из демо-экзаменов в базе названия картинок с расширением .jpg, а реальные файлы были с расширением .jpeg — обращайте внимание, в Excel-e это исправить проще, чем в базе

  4. Экспорт данных

    MySQL может импортировать данные только в CSV-формате. Файл либо «сохраняем как», либо «экспортируем»

Проверка кодировки

ВАЖНО!!! Кодировка импортируемых данных должна быть такой же, как кодировка базы данных (сейчас практически везде используется UTF-8)

Excel экспортирует текстовые данные в кодировке ANSI (1251)

Для перекодировки файла можно воспользоваться программой Notepad++ — она будет на демо-экзамене

  1. Обращаем внимание на кодировку файла. У меня, например, с какого-то перепугу решило что Macintosh.

    Меняем на «Windows-1251»

  2. Кодировка теперь нормальная, но по содержимому видно, что у некоторых столбцов есть лидирующий пробел. Это не есть хорошо.

    Сдесь же в Notepad++ заменим "; " на ";"

  3. Если визуально всё нормально, то меняем кодировку файла на UTF-8

    и сохраняем файл

Импорт во временную таблицу

В контекстном меню базы данных запускаем «мастер импорта данных»

Импортируем в новую таблицу с уникальным именем

Смотрим, всё ли правильно определилось. Судя по тому, что цену как число не распознало MySQL по-умолчанию ждёт точку в качестве разделителя.

Меняем тип поля на double и в появившемся поле «Decimal Separator» пишем запятую.

После импорта открываем таблицу и смотрим всё-ли нормально

перенос данных из временной таблицы в нужную таблицу(ы)

По структуре таблицы Material видно, что одно поле словарное (MaterialTypeID)

т.е. нам сначала нужно заполнить таблицу MaterialType уникальными значениями типов материалов.

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

Но, кроме названия метериала (Title) в таблице MaterialType есть ещё какой-то DefectedPercent. Смотрим структуру данных:

и видим, что поле это обязательное.

Но в исходных данных у нас никаких «дефектных процентов» нет…

Тут есть два варианта:

  • добавить фиксированное значение, взятое «с потолка»
  • отменить обязательность этого поля (NN = Not NULL)

Мы будем использовать первый вариант.

  1. Открываем окно с SQL-запросами (возможно оно ещё открыто после импорта структуры базы)

  2. Пишем запрос для вставки уникальных значений типов материалов из временной таблицы.

    Современные клиенты СУБД позволяют облегчить написание этих запросов:

    • в контекстном меню таблицы MaterialType выбираем «Send to SQL Editor» -> «Insert Statement»

      В акивное окно SQL-запросов вставится следующий запрос:

      INSERT INTO `ekolesnikov`.`MaterialType`
          (`ID`,
          `Title`,
          `DefectedPercent`)
      VALUES
          (<{ID: }>,
          <{Title: }>,
          <{DefectedPercent: }>);

      т.е. у нас уже указана база и таблица, и перечислены все поля этой таблицы.

    • Из запроса удаляем поле ID (оно автоинкрементное и само заполнится при вставке) и выражение VALUES… (мы будем вставлять не фиксированные значения, а результат выборки из другой таблицы)

      Должен остаться такой текст (курсор оставляем после текста запроса)

    • теперь аналогично из контекстного меню таблицы material_import выбираем «Send to SQL Editor» -> «Select All Statement»

      INSERT INTO `ekolesnikov`.`MaterialType`
          (`Title`,
          `DefectedPercent`)
      SELECT 
          `material_import`.`name`,
          `material_import`.`type`,
          `material_import`.`count`,
          `material_import`.`edizm`,
          `material_import`.`quantity`,
          `material_import`.`min_ost`,
          `material_import`.`price`
      FROM 
          `ekolesnikov`.`material_import`;
    • Количество и порядок выбираемых полей должны соответствовать вставляемым полям, перечисленным в круглых скобках запроса INSERT. Редактируем SELECT запрос:

      INSERT INTO `ekolesnikov`.`MaterialType`
          (`Title`,
          `DefectedPercent`)
      SELECT 
          DISTINCT `material_import`.`type`, 
          0
      FROM 
          `ekolesnikov`.`material_import`;

      т.е. мы убрали все поля, кроме type (тип материала), поставили перед ним ключевое слово DISTINCT (выбирать только уникальные) и для поля DefectedPercent записали константу «0»

      После выполнения получившегося запроса смотрим что загрузилось в целевую таблицу (MaterialType):

      Всё нормально, переходим к следующему этапу.

  3. Пишем запрос для вставки данных в таблицу материалов (Material) с учётом словарного поля MaterialTypeID

    • очищаем окно SQL-запроса, вставляем в него «Insert Statement» для таблицы Material и вырезаем лишнее

      Вырезаем поле ID (автоинкермент), поля Description и Image (в исходных данных их нет и поля не обязательные)

      INSERT INTO `ekolesnikov`.`Material`
          (`Title`,
          `CountInPack`,
          `Unit`,
          `CountInStock`,
          `MinCount`,
          `Cost`,
          `MaterialTypeID`)
    • Вставляем «Select All Statement» из таблицы material_import

      INSERT INTO `ekolesnikov`.`Material`
          (`Title`,
          `CountInPack`,
          `Unit`,
          `CountInStock`,
          `MinCount`,
          `Cost`,
          `MaterialTypeID`)
      SELECT 
          `material_import`.`name`,
          `material_import`.`type`,
          `material_import`.`count`,
          `material_import`.`edizm`,
          `material_import`.`quantity`,
          `material_import`.`min_ost`,
          `material_import`.`price`
      FROM 
          `ekolesnikov`.`material_import`;

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

      INSERT INTO `ekolesnikov`.`Material`
          (`Title`,
          `CountInPack`,
          `Unit`,
          `CountInStock`,
          `MinCount`,
          `Cost`,
          `MaterialTypeID`)
      SELECT `material_import`.`name`,
          `material_import`.`count`,
          `material_import`.`edizm`,
          `material_import`.`quantity`,
          `material_import`.`min_ost`,
          `material_import`.`price`,
          MaterialType.ID
      FROM 
          `ekolesnikov`.`material_import`, 
          `ekolesnikov`.MaterialType
      WHERE 
          `material_import`.`type`=MaterialType.Title;

      Для получения идентификатора типа материала (MaterialType.ID) мы добавили в запрос таблицу MaterialType (в секцию FROM)

      И связали исходные таблицы по названию типа (секция WHERE)

      После выполнения получившегося запроса в окне Output должно появиться сообщение:

      50 row(s) affected Records: 50  Duplicates: 0  Warnings: 0	0.047 sec
      

Самостоятельно загрузите данные из файлов products_k_import.csv и productmaterial_k_import.xlsx

CSV – популярное расширение файлов, которые используются, в основном, для обмена данными между различными компьютерными программами. Чаще всего необходимости в открытии и редактировании таких документов нет. Однако в некоторых случаях перед пользователями может встать такая задача. Программа Excel позволяет это сделать, но в отличие от стандартных файлов в формате XLS и XLSX, простое открытие документа двойным щелчком мыши не всегда дает качественный результат, что может выражаться в некорректном отображении информации. Давайте посмотрим, каким образом можно открыть файлы с расширением CSV в Экселе.

  • Открываем CSV-файлы

    • Метод 1: двойным щелчком или через контекстное меню

    • Метод 2: применяем Мастер текстов

    • Метод 3: через меню “Файл”

  • Заключение

Для начала давайте разберемся, что из себя представляют документы в данном формате.

CSV – аббревиатура, которая расшифровывается как “Comma-Separated Values” (на русском языке означает “значения, разделенные запятыми”).

Как следует из названия, в таких документах используются разделители:

  • запятая – в англоязычных версиях;
  • точка с запятой – в русскоязычных версиях программы.

Во время открытия документа в Excel основная задача (проблема) заключается в выборе способа кодировки, примененного при сохранении файла. Если будет выбрана не та кодировка, скорее всего, пользователь увидит множество нечитаемых символов, и полезность информации будет сведена к минимуму. Помимо этого, ключевое значение имеет используемый разделитель. Например, если документ был сохранен в англоязычной версии, а затем его пытаются открыть в русскоязычной, скорее всего, качество отображаемой информации пострадает. Причина, как мы ранее отметили, заключается в том, что в разных версиях используются разные разделители. Давайте посмотрим, как избежать этих проблем и как правильно открывать файлы CSV.

Прежде, чем приступить к более сложным методам, давайте рассмотрим самый простой. Он применим только в тех случаях, когда файл был создан/сохранен и открывается в одной и той же версии программы, а значит, проблем с кодировкой и разделителями быть не должно. Здесь возможно два варианта, опишем их ниже.

Excel установлена как программа по умолчанию для открытия CSV-файлов

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

Открытие файла двойным щелчком мыши в Windows

Для открытия CSV-фалов назначена другая программа или не назначена вовсе

Алгоритм действия в таких ситуациях следующий (на примере Windows 10):

  1. Щелкаем правой кнопкой мыши по файлу и в открывшемся контекстном меню останавливаемся на команде “Открыть с помощью”.
  2. Во вспомогательном меню система может сразу предложить программу Excel. В этом случае кликаем по ней, в результате чего файл откроется (как и при двойном щелчке по нему). Если нужной нам программы нет в списке, кликаем по пункту “Выбрать другое приложение”.Выбор программы для открытия файла через контекстное меню в Windows
  3. Появится окно, в котором мы можем выбрать программу (чтобы раскрыть весь список доступных вариантов, требуется нажать кнопку “Еще приложения”), с помощью которой требуется открыть документ. Ищем то, что нам нужно и жмем OK. Чтобы назначить Excel приложением по умолчанию для данного типа файлов, предварительно ставим соответствующую галочку.Назначение Excel программой по умолчанию для файлов CSV
  4. В некоторых случаях, когда и в этом окошке не удается найти Эксель, щелкаем по кнопке “Найти другое приложение на этом компьютере” в конце списка.Просмотр других приложений для открытия файла CSV в Windows 10
  5. На экране отобразится окно, в котором мы переходим к расположению программы на ПК, отмечаем исполняемый файл с расширением EXE и жмем кнопку “Открыть”.Выбор Excel для открытия файла CSV в Windows 10

Независимо от того, какой из описанных выше способов был выбран, результатом будет открытие CSV-файла. Как мы упомянули выше, корректно отображаться содержимое будет только при соответствии кодировки и разделителей.

Открытый в Эксель файл в формате CSV

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

Некорректное отображение содержимого файла CSV в Эксель

Поэтому описанный метод подходит не всегда, и мы переходим к следующим.

Метод 2: применяем Мастер текстов

Воспользуемся интегрированным в программу инструментом – Мастером текстов:

  1. Открыв программу и создав новый лист, чтобы получить доступ ко всем функциям и инструментам рабочей среды, переключаемся во вкладку “Данные”, где щелкаем по кнопке “Получение внешних данных”. Среди раскрывшихся вариантов выбираем “Из текста”.Запуск Мастера текста в Эксель
  2. Откроется окно, в котором нам нужно перейти к расположению файла, который требуется импортировать. Отметив его жмем кнопку “Импорт”.Выбор файла для импорта в Эксель
  3. Появится Мастер текстов. Проверяем, чтобы была выбрана опция “с разделителями” для параметра “Формат данных”. Выбор формата зависит от кодировки, которая была использована при его сохранении. Среди самых популярных форматов можно отметить “Кириллицу (DOS)” и “Юникод (UTF-8)”. Понять, что сделан правильный выбор можно, ориентируясь на предварительный просмотр содержимого в нижней части окна. В нашем случае подходит “Юникод (UTF-8)”. Остальные параметры чаще всего не требует настройки, поэтому жмем копку “Далее”.Мастер текстов в Экселе - шаг 1
  4. Следующим шагом определяемся с символом, который служит в качестве разделителя. Так как наш документ был создан/сохранен в русскоязычной версии программы, выбираем “точку с запятой”. Здесь у нас, как и в случае с выбором кодировки, есть возможность попробовать различные варианты, оценивая результат в области предпросмотра (можно, в том числе, указать свой собственный символ, выбрав опцию “другой”). Задав требуемые настройки снова нажимаем кнопку “Далее”.Мастер текстов в Экселе - шаг 2
  5. В последнем окне, чаще всего, вносить какие-либо изменения в стандартные настройки не нужно. Но если требуется изменить формат какого-то столбца, сначала кликаем по нему в нижней части окна (поле “Образец”), после чего выбираем подходящий вариант. По готовности жмем “Готово”.Мастер текстов в Экселе - шаг 3
  6. Появится окошко, в котором выбираем способ импорта данных (на имеющемся или на новом листе) и жмем OK.
  7. Все готово, нам удалось импортировать данные CSV-файла. В отличие от первого метода, мы можем заметить, что была соблюдена ширина столбцов с учетом содержимого ячеек.Результат импорта содержимого файла CSV в Эксель

И последний метод, которым можно воспользоваться заключается в следующем:

  1. Запустив программу выбираем пункт “Отрыть”.Открытие документа в ЭксельЕсли программа уже ранее была открыта и ведется работа на определенном листе,  переходим в меню “Файл”.Переход в меню Файл в ЭксельЩелкаем по команде “Открыть” в списк команд.Открытие файла в Excel
  2. Жмем кнопку “Обзор”, чтобы перейти к окну Проводника.Переход к выбору файла для открытия в Excel
  3. Выбираем формат “Все файлы”, переходим к месту хранения нашего документа, отмечаем его и щелкаем кнопку “Открыть”.Выбор файла для открытия в Excel
  4. На экране появится уже знакомый нам Мастер импорта текстов. Далее руководствуемся шагами, описанными в Методе 2.Мастер текстов в Excel - шаг 1

Заключение

Таким образом, несмотря на кажущуюся сложность, программа Эксель вполне позволяет открывать и работать с файлами в формате CSV. Главное – определиться с методом реализации. Если при обычном открытии документа (двойным щелчком мыши или через контекстное меню) его содержимое содержит непонятные символы, можно воспользоваться Мастером текста, который позволяет выбрать подходящую кодировку и знак разделителя, что напрямую влияет на корректность отображаемой информации.

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

Содержание

  1. Как конвертировать CSV в формат Excel
  2. Открытие CSV-документа в Excel
  3. Открытие CSV-документа через Windows Explorer
  4. Импорт CSV в Excel
  5. Проблемы при конвертации и их решения
  6. Файл открывается неправильно
  7. Исчезают нули в начале чисел
  8. Часть значений выглядит как даты
  9. Как импортировать в Excel множественные CSV-файлы

Как конвертировать CSV в формат Excel

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

  1. Прямое открытие в Excel.
  2. Открытие через Windows Explorer.
  3. Импорт документа со сменой формата.

Открытие CSV-документа в Excel

Excel может открывать документы с расширением .csv напрямую, без конвертации. Формат после открытия указанным способом не меняется, сохраняется расширение .csv – хотя после редактирования расширение можно поменять.

  1. Запустите Excel, кликните на «Файл«, затем «Открыть«.
  2. В появившемся окне выберите опцию «Текстовые файлы» из развернувшегося перечня.

Конвертировать CSV в Excel в виде таблицы

  1. Найдите необходимый Вам документ и нажмите на него двойным кликом мыши.

Документы .csv открываются в Excel сразу, без дополнительных манипуляций. А вот файлы .txt потребуют конвертации – возникнет окошко «Мастера импорта текста«.

Есть случаи, когда документ лучше не открывать напрямую, а вызвать Мастер. Такой подход оправдан в следующих случаях:

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

Мастер запустится, если поменять расширение документа на .txt. Также импорт файла можно начать иначе, о чём пойдёт речь далее, после описания второго способа открытия.

Если после открытия документа в него внести изменения, Excel предложит сохранить его в формате .xls (или .xlsx), поскольку иначе часть форматирования будет потеряна. Потом всегда останется возможность сменить формат обратно, однако, может утратиться другая часть содержимого – в начале чисел могут исчезнуть нули, часть записей может поменять свой вид.

Открытие CSV-документа через Windows Explorer

Этот путь принципиально не отличается от предыдущего. Чтобы открыть документ, достаточно два раза кликнуть на него в Windows Explorer.

Перед открытием убедитесь, что рядом с именем документа находится значок программы Excel, а не какой-то другой – это означает, что именно Excel выбран как программа, которой следует открывать подобные файлы. Иначе откроется какая-либо иная программа. Сменить её на Excel можно так:

  1. Вызовите кликом правой кнопки мыши на любой файл .csv контекстное меню и в нём примените Открыть с помощью… > Выбрать программу.
  2. Выберите Excel (desktop) из Рекомендованных программ, обозначьте его как программу, которую следует применять для подобных файлов всегда (поставьте галочку внизу), и закройте окошко нажатием ОК.

Конвертировать CSV в Excel в виде таблицы

Импорт CSV в Excel

Также возможно превратить открываемый документ в книгу Excel. Формат сменится на .xls для ранних версий Excel (2000, 2003) и на .xlsx — для всех остальных. Всё содержимое будет отображено на одном листе.

  1. Нажмите на ячейку в листе, куда должен начаться импорт. Обычно это самая первая ячейка в таблице, А1. Начиная с неё, будет заполнено столько строк, сколько есть в открываемом файле, и столько столбцов, сколько имеется значений в каждом столбце.
  2. Во вкладке “Данные” в группе “Получение внешних данных” выберите “Из текста”.

Конвертировать CSV в Excel в виде таблицы

  1. В возникшем окне найдите требуемый документ и кликните на него два раза (также можно использовать кнопку Импорт внизу окна).

Конвертировать CSV в Excel в виде таблицы

  1. Далее нужно следовать пошаговой инструкции открывшегося Мастера импорта текста.

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

Конвертировать CSV в Excel в виде таблицы

Шаг 1. Мастер предложит Вам выбрать тип файла – как нетрудно догадаться, это будет «с разделителями» (по-английски — delimited), и строку, с которой начнётся перенос содержимого — скорее всего, нужно начать со строки 1, если вы не хотите переносить только часть содержимого. В окне ниже будут показаны первые строки из выбранного документа.

Конвертировать CSV в Excel в виде таблицы

Шаг 2. Теперь требуется понять, какой используется разделитель (их может быть больше одного) в файле, и указать этот знак в Мастере. В нём есть опции выбора из стандартных разделителей, но если в документе применён нетипичный символ, можно выбрать Другой и ввести требуемый знак. В используемом для демонстрации файле разделители — Запятая и Таб. Запятые разделяют ячейки с характеристиками продуктов, такими как порядковый номер и количество проданных экземпляров, а табуляция отделяет один продукт от другого — информация о каждом должна начинаться с новой строки.

Также нужно определить и указать ограничитель текста. Это символ, поставленный перед и после каждого отрезка текста, который должен располагаться в одной ячейке. Благодаря ограничителю, каждый подобный отрезок воспринимается как отдельное значение, даже если внутри него присутствуют символы, выбранные для разделения значений. В нашем документе каждое значение обрамлено кавычками — потому, даже если в нём присутствует запятая (например «начало, потом продолжение»), весь его текст будет помещён в одну ячейку, а не в две последовательные.

Конвертировать CSV в Excel в виде таблицы

Шаг 3. Здесь достаточно взглянуть на превью и, если на нём не видно недопустимых огрехов, нажать Готово. Может случиться так, что некоторые из значений будут разделены не одним разделителем, а несколькими, в результате между ними возникнут ячейки без значений. Чтобы такого не происходило, выберите флажок Считать последовательные разделители одним.

  1. Выберите путь назначения (это может быть новый или уже существующий лист) и нажмите ОК, чтобы закончить процесс импорта.

Конвертировать CSV в Excel в виде таблицы

Также можно нажать Свойства — там содержатся другие возможности. Например, можно форматировать содержимое, настроить разметку и то, как информация будет обновляться.

Конвертировать CSV в Excel в виде таблицы

Иногда результат конвертации оказывается далёким от ожидаемого. О том, как этот результат можно изменить, пойдёт речь в следующем разделе статьи.

Проблемы при конвертации и их решения

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

Ограничители текста также могут варьироваться – чаще всего это либо кавычки, либо метка порядка байтов. Ограничителей может и вовсе не быть – тогда символ, используемый как разделитель, всегда воспринимается как таковой (тогда это обычно не запятая – она слишком часто применяется в тексте — а иной, менее распространённый символ).

Нестандартные файлы могут открываться неправильно — чтобы они отображались так, как надо, приходится менять настройки компьютера или открывающей программы. Давайте посмотрим, какие бывают затруднения, и какие для них существуют решения.

Файл открывается неправильно

Признаки. Всё содержимое документа помещается в первый столбец.

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

Решения. Есть разные способы решить эту проблему:

  1. Сменить разделяющий знак в самом документе. Откройте его в Notepad или подобном редакторе, и в начальную строку (пустую, все данные должны быть в строках ниже) внесите указанный ниже текст:
  • для смены разделителя на запятую: sep=,
  • для смены на точку с запятой: sep=;

Иной символ, написанный после sep= в начальной строке, также станет разделителем.

  1. Разделительный знак, используемый в файле, можно указать и в самой программе Excel. В версиях 2016, 2013 или 2010 года для этого нужно открыть вкладку Данные и выбрать “Текст по столбцам” в группе “Работа с данными”.

Конвертировать CSV в Excel в виде таблицы

После этого откроется окно “Мастера распределения текста по столбцам”. Там из предложенных форматов данных нужно выбрать те, что с разделителями. Потом нужно нажать Далее и, после выбора разделителя, Готово.

Конвертировать CSV в Excel в виде таблицы

  1. Чтобы документ автоматически открывался через Мастер импорта, а не просто в листе Excel, расширение можно сменить с .csv на .txt. В Мастере есть возможность указать любой символ как разделяющий — каким образом это сделать, в статье объяснено ранее.
  2. Используйте VBA. Воспользоваться можно, например, — он подойдёт для Excel 2000 или 2003. Код можно изменить так, чтобы он подходил для других версий.

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

  1. Измените разделитель и знак десятичной дроби в настройках компьютера

В Панели управления, вызываемой кнопкой Пуск, выберите “Дополнительные параметры” из перечня “Региональные Стандарты”. После клика возникнет окошко “Настройка формата” – в нём можно выбрать “Разделитель элементов списка” и разделитель целой и дробной части числа. Если в качестве разделительного знака в файлах требуется запятая, сначала установите точку как знак для дроби. Может оказаться и наоборот – нужна точка с запятой как разделительный символ. Тогда для дробей можно оставить любой знак, это не вызовет конфликта.

Конвертировать CSV в Excel в виде таблицы

Когда все настройки завершены, нажмите ОК на обоих из двух открытых окон — они закроются, и изменения сохранятся. Имейте в виду, что теперь они работают для всех программ в компьютере.

Исчезают нули в начале чисел

Признак. Некоторые из значений в исходном документе – числа, которые начинаются нулями, не отделёнными знаком дроби (например, шифры и коды с фиксированным количеством цифр, логины и пароли, показания счётчиков и приборов). В Excel нули в начале таких чисел исчезают. Если отредактировать файл и потом сохранить его как книгу Excel, в этой книге уже нельзя будет найти, где были те числа с нулями.

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

Решение. Смените расширение на .txt, чтобы при открытии документа включился Мастер импорта. Когда дойдёте до Шага 3, смените формат столбцов с числами, которые начинаются нулями, на текстовый.

Конвертировать CSV в Excel в виде таблицы

Часть значений выглядит как даты

Признак. В виде дат отображаются значения, в оригинале представляющие собой обычный текст или числа.

Причина. Общий формат предполагает превращение в даты значений, напоминающих таковые для Excel. Если в CSV-документе будет отдельное значение вроде may12, то в Excel-листе оно отобразится как дата.

Решение. Сходно с таковым в предыдущем случае. Смените расширение на .txt, в Мастере смените формат значений, конвертируемых в даты, на текстовый.

Конвертировать CSV в Excel в виде таблицы

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

Как импортировать в Excel множественные CSV-файлы

В Excel возможно открыть сразу несколько CSV-файлов.

  1. Нажмите Файл > Открыть и выберите опцию Текстовые файлы из выпадающего листа внизу.
  2. Чтобы выбрать несколько файлов, расположенных рядом, сначала выберите первый из них, затем нажмите Shift и кликните на последний. Кроме выбранных файлов, выделятся все файлы между ними.
  3. Кликните Открыть.

Конвертировать CSV в Excel в виде таблицы

Недостаток этого метода в том, что каждый выбранный файл будет открыт в Excel отдельно. Переход от одного документа к другому может увеличивать временные затраты. Однако, затем возможно скопировать содержимое их всех в листы одной книги.

Объяснение было долгим, однако, теперь у Вас получится без особых затруднений открыть любой файл CSV в Excel. Если что-то кажется непонятным на первый взгляд, просто следуйте указанным шагам — и всё прояснится.

Оцените качество статьи. Нам важно ваше мнение:

Понравилась статья? Поделить с друзьями:
  • Как excel повторять шапку таблицы на каждой странице
  • Как excel определяет что в ячейку введена формула что может входить в формулу
  • Как excel перенести на другую строку внутри одной ячейки
  • Как excel начинает воспринимать ячейку если в начале поставить знак
  • Как excel переводит цифры в буквы