Хотя я стараюсь избегать этого, мне иногда приходится открывать файл CSV в Excel. Когда я это делаю, он форматирует столбцы, содержащие числа, что делает их бесполезными для моих целей. Насколько я могу судить, единственный способ предотвратить это при импорте - переименовать файл, чтобы расширение не было .csv, и использовать мастер импорта, чтобы указать формат каждого столбца индивидуально. Для файлов с 50-60 столбцами это нецелесообразно.
Поскольку каждый ответ на этот часто задаваемый вопрос в Интернете предлагает какие-либо способы преобразования отформатированных чисел обратно после открытия файла (что не сработает для меня - я хочу решить общую проблему, а не несколько конкретных случаев) или вручную выбирая тип формата каждого столбца (что я не хочу делать), я ищу способ установить глобальные предпочтения или стиль, чтобы все столбцы всех открытых CSV-файлов всегда форматировались как текст. Я также знаю, как «защищать» числа с помощью кавычек, но файлы, которые я получаю, не приходят такими, и я надеялся избежать предварительной обработки файлов, чтобы Excel их не испортил.
Есть ли способ сделать это конкретно : всегда форматировать все столбцы в открытых файлах CSV в виде текста, не выбирая каждый столбец вручную каждый раз во время импорта?
Я использую Excel 2003, но я приму ответы на 2007 год, если вы это знаете.
источник
Ответы:
Это работает:
Использование:
Разделенный запятыми файл теперь открыт в виде листа Excel со всеми столбцами, отформатированными как текст.
Обратите внимание, что волшебное решение @ Wetmelon работает просто отлично, но если вы открываете много файлов, вы, как и я, можете устать от прокручивания до столбца 60 каждый раз, чтобы нажать Shift-Click.
EDIT @GSerg утверждает в комментарии ниже, что это «не работает» и «съедает пробелы и ведущие нули». Я просто процитирую комментарий к вопросу, который является более описательным:
Таким образом, приведенный выше код «работает», но убит этим нелепым поведением Excel. Каким бы способом вы его не вырезали, вы застряли в необходимости изменить расширение на что-то отличное от ".csv", извините! После этого ты дома свободен.
источник
Workbooks.OpenText
имеет свои недостатки по конструкции (см. Мой ответ ниже). ИспользуйтеQueryTables
вместо этого.Как открыть CSV в Excel
Хороший способ
Excel → Данные → Получить внешние данные → Выделите все столбцы с помощью Shiftи выберите Текст.
Переворот: все значения корректно обрабатываются как текст без каких-либо исключений
Недостаток: больше шагов, чем простой двойной щелчок
Плохой способ
Откройте CSV с двойным щелчком мыши или Excel Открыть с помощью диалогового окна
Недостаток: внутренний обработчик CSV в Excel неправильно интерпретирует значения с лидирующим знаком
-
или=
знаком как формула, а не текстНедостаток: вы потеряете ведущие нули из двоичных значений, например,
0001
из-за автоматически определяемого формата столбца в ExcelХороший способ (для VBA)
Используйте QueryTables (аналог VBA для
Get external data
) → Пример кодаПереворот: все значения корректно обрабатываются как текст без каких-либо исключений
Недостаток: немного больше кода, чем
OpenText
методаПлохой путь (для VBA)
Используйте
Workbooks.OpenText
метод → Пример кодаНедостаток: этот метод все еще использует внутренний обработчик импорта CSV в Excel со всеми его недостатками
Недостаток: Кроме того,
fieldinfo
параметрOpenText
игнорируется, если расширение CSV. Обычно этот параметр позволяет вам выбрать каждый формат столбца, но только если расширение не CSV. Вы можете прочитать больше об этом поведении в переполнении стека.Временное переименование исходного расширения из CSV в TXT и затем обратно в CSV является допустимым обходным решением, если у вас есть полный контроль над исходным файлом.
Дополнительные методы
Если у вас есть доступ к источнику, который создает ваш CSV, вы можете изменить синтаксис CSV.
Каждое значение заключайте в двойные кавычки и ставьте перед ним знак равенства, например,
="00001"
или добавляйте табуляцию к каждому значению. Оба способа заставят Excel воспринимать значение как текстОригинальный контент CSV
CSV в Excel при двойном щелчке
Обратите внимание, что строка 2 (метод двойных кавычек) и строка 3 (метод табуляции) не изменяются в Excel
Откройте CSV в блокноте и скопируйте и вставьте все значения в Excel. Затем используйте Data - Text to ColumnsDownside: Text in Columns для изменения формата столбца с общего обратно на текстовый, что дает противоречивые результаты. Если значение содержит
-
символы в окружении (например, «= E1-S1»), Excel пытается разбить это значение на несколько столбцов. Значения, расположенные справа от этой ячейки, могут быть перезаписаны(поведение текста в столбцах было изменено где-то между Excel 2007 и 2013, поэтому оно больше не работает)
Надстройка Excel для открытия CSV и импорта всех значений в виде текста
Это плагин Excel для упрощения действий импорта CSV.
Основное преимущество: это решение в один клик, использующее
QueryTables
тот же самый пуленепробиваемый метод получения внешних данныхМонтаж
%appdata%\Microsoft\AddIns
File tab → Options → Add-Ins → Go To
и выберитеImportCSV.xla
File tab → Options → Trust Center → Trust Center Settings → Macro Settings → Enable all macros
Вы заметите новую запись в строке меню под названием «Надстройки», и вы будете использовать эту кнопку, чтобы быстро открывать файлы CSV без необходимости проходить через хлопоты диалогового окна «Импорт».
Скрипт PowerShell для открытия CSV-файлов непосредственно из Windows Explorer
Вы можете использовать скрипт PowerShell, чтобы открывать файлы CSV и автоматически передавать их в Excel. Скрипт молча использует метод импорта текста Excel, который всегда обрабатывает значения как текст и, в качестве бонуса, обрабатывает кодировку UTF-8.
C:\my\folder\myScript.ps1
. (Обратите внимание на расширение.ps1
)shell:sendto
» EnterТеперь вы можете выбрать (несколько) CSV и открыть их в Excel через
Right-click » SendTo » Excel
источник
Вы можете попробовать открыть файл .xlsx, а затем создать подключение к данным и импортировать файл .csv. Выберите разделитель «запятая», затем выберите параметр для обработки всех столбцов как текста, а не «Общие».
Изменить: О, я не полностью прочитал вопрос. В мастере импорта выберите первый заголовок столбца, который вы хотите импортировать как текст, выделите последний заголовок столбца и нажмите Shift + щелкните заголовок. Затем выберите радиальную опцию «Текст».
источник
Предложение Ветмелона работает (даже с .CSV), если вы делаете следующее:
Я знаю, что это больше шагов, но, по крайней мере, это позволяет мне открывать CSV таким образом, не меняя расширение
источник
Осторожно!
При использовании ручного метода «Excel → Данные → Получить внешние данные → Выбрать все столбцы и выбрать Текст» ......
При этом в столбцах будет только текст «с данными в первой строке» (обычно это строка заголовка). Этот мастер не показывает столбцы, расположенные дальше справа, которые могут содержать данные ниже, но не в первой строке. Например:
Row1Col1, Row1Col2, Row1Col3
Row2Col1, Row2Col2, Row2Col3, Row2Col4
Вы никогда не увидите Col 4 в мастере импорта, поэтому у вас не будет возможности изменить его с общего на текстовый формат перед импортом !!!!
источник
Вот альтернативная процедура для кода, размещенного выше Жан-Франсуа Корбеттом
Эта процедура импортирует CSV-файл в Excel со всеми столбцами, отформатированными как текст
источник
Если вы всегда импортируете одни и те же данные (постоянный формат записи, макет и т. Д.), Вы можете написать макрос Access, используя спецификацию импорта, а затем сбросить данные обратно в Excel. Сделано это может раз. Другой способ сделать это - использовать VBA и считывать данные в таблицу по одной записи за раз и анализировать их во время чтения. Насколько я знаю, нет способа установить формат по умолчанию во время импорта в Excel, и даже если бы вы могли, это вызвало бы проблемы со следующим типом файла, который вы пытаетесь проанализировать.
источник
Как запрос, отправив мой комментарий в качестве ответа (с добавлением немного больше информации):
Hey Scripting Guy написал статью в блоге об импорте CSV в Excel, которая может быть полезной для вас. Игра с объектом данных внутри powershell может позволить вам делать то, что вы хотите.
Хотя в статье конкретно упоминается об импорте данных в ячейки, которые могут выходить из числового формата, можно поэкспериментировать с некоторыми свойствами и методами Excel ComObject, чтобы вместо этого принудительно вводить данные в ячейки в виде необработанного текста (или принудительно форматирование ячеек в текст до или после импорта).
источник
По неизвестным причинам, даже если вы явно предоставите форматы для всех столбцов, Excel проигнорирует его, если расширение файла - CSV.
Некоторые варианты:
Создайте запрос для импорта данных, как предлагает Ветмелон .
Недостаток: у вас могут отсутствовать драйверы базы данных CSV на 64-битной машине.
Используйте код Джин , но включите копирование файла во временную папку и изменение расширения копии.
Недостаток: нет ссылки на оригинальный файл (сохранение перезапишет копию); Вы должны будете вручную удалить копию позже. Тем не менее, вы можете вручную сохранить как поверх оригинального CSV.
Откройте CSV в Блокноте Ctrl+A, Ctrl+Cвставьте в Excel, то данные - Текст в колонки, то это обычный мастер , где вы можете задать все столбцы в текст на одном дыхании. Это другой вариант предыдущего варианта, потому что он также скрывает драгоценное расширение от Excel.
Недостаток: ручной.
Иметь очень простой цикл VBA, который считывает весь файл в память и помещает его на лист, ячейка за ячейкой.
Недостаток: медленнее, некрасиво.
источник
Если я правильно понимаю вопрос, это легко решить, используя опцию Transpose в Paste-Special, как описано здесь .
источник