Запретить Excel автоматически преобразовывать определенные текстовые значения в даты

StackOverflow https://stackoverflow.com/questions/165042

  •  03-07-2019
  •  | 
  •  

Вопрос

Кто-нибудь случайно не знает, есть ли токен, который я могу добавить в свой csv для определенного поля, чтобы Excel не пытался преобразовать его в дату?

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

Это было полезно?

Решение

Я обнаружил, что, поставив '=' перед двойными кавычками, вы достигнете того, чего вы хотите.Это заставляет данные быть текстовыми.

например.="2008-10-03",="еще текст"

РЕДАКТИРОВАТЬ (в соответствии с другими сообщениями):из-за Ошибка Excel 2007 , отмеченная Джеффикинсом следует использовать решение, предложенное Эндрю: "=""2008-10-03"""

Другие советы

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

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

  • Почтовый индекс
  • телефонные номера
  • государственные идентификационные номера

который иногда может начните с одного или нескольких нулей (0), которые выбрасываются при преобразовании в числовые.Или значение содержит символы, которые можно спутать с математическими операторами (как в датах:/, -).

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

  • где файл может быть импортирован в программу, отличную от MS Excel (на ум приходит функция слияния почты MS Word).,
  • где может быть важна удобочитаемость для человека.

Мой хак, чтобы обойти это

Если предварительно добавить в значение нечисловой символ и / или не дату, значение будет распознано как текст и не будет преобразовано.Непечатаемый символ был бы хорош, так как он не изменит отображаемое значение.Однако простой старый символ пробела (\s, ASCII 32) не работает для этого, поскольку Excel обрезает его, а затем значение все равно преобразуется. Но существуют различные другие печатные и непечатные символы пробела, которые будут хорошо работать. Самый простой однако заключается в том, чтобы добавьте (add after) простой символ табуляции ( , ASCII 9).

Преимущества такого подхода:

  • Доступно с клавиатуры или с помощью легко запоминающегося ASCII-кода (9),
  • Это не мешает импорту,
  • Обычно не влияет на результаты слияния почты (в зависимости от макета шаблона - но обычно это просто добавляет большой пробел в конце строки).(Однако, если это проблема, посмотрите на другие символы, напримерпробел нулевой ширины (ZWSP, Unicode U+200B)
  • не является большой помехой при просмотре CSV в Блокноте (и т.д.),
  • и может быть удален путем поиска / замены в Excel (или Блокноте и т.д.).
  • Тебе не нужно этого делать импорт CSV, но можно просто дважды щелкнуть, чтобы Открыть файл CSV в Excel.

Если есть причина, по которой вы не хотите использовать вкладку, поищите в таблице Unicode что-нибудь еще подходящее.

Другой вариант

возможно, это создание XML-файлов, для которых определенный формат также принимается для импорта более новыми версиями MS Excel, и который допускает гораздо больше опций, похожих на формат .XLS, но у меня нет опыта работы с этим.

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


Дополнение

Следует сказать, что более новые версии (2013+) MS Excel больше не открывают CSV в формате электронной таблицы - еще один скачок скорости в рабочем процессе, делающий Excel менее полезным...По крайней мере, существуют инструкции, как это обойти.Смотрите , напримерэтот Stackoverflow: Как правильно отображать CSV-файлы в Excel 2013?.

Работая над решением Джарода и проблемой, поднятой Джеффикинсом, вы могли бы изменить

"May 16, 2011"

Для

"=""May 16, 2011"""

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

Если у вас есть возможность присвоить файлу имя, отличное от ".csv", вы можете назвать его с помощью ".txt" расширение, такое как «Myfile.txt» или " Myfile.csv.txt " ;. Затем, когда вы откроете его в Excel (не с помощью перетаскивания, а с помощью «Файл»> «Открыть» или «Список последних использованных файлов»), Excel предоставит вам «Мастер импорта текста».

На первой странице мастера выберите " с разделителями " для типа файла.

На второй странице мастера выберите ", " в качестве разделителя, а также выберите текстовый квалификатор, если вы заключили значения в кавычки

На третьей странице выберите каждый столбец отдельно и назначьте каждому тип " Текст " вместо "общего" чтобы Excel не связывался с вашими данными.

Надеюсь, это поможет вам или кому-то с подобной проблемой!

ПРЕДУПРЕЖДЕНИЕ. В Excel '07 (по крайней мере) есть (еще одна) ошибка: если в содержимом поля есть запятая, она не анализирует поле = " содержимое " правильно, а скорее ставит все после запятой в следующее поле, независимо от кавычек.

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

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

При создании строки для записи в мой CSV-файл на C # мне пришлось отформатировать ее следующим образом:

"=\"" + myVariable + "\""

В Excel 2010 откройте новый лист. На ленте «Данные» нажмите «Получить внешние данные из текста». Выберите файл CSV, затем нажмите «Открыть». Нажмите " Далее " ;. Снимите флажок «Вкладка», поставьте галочку рядом с «Запятая», затем нажмите «Далее». Нажмите в любом месте первого столбца. Удерживая клавишу Shift, перетащите ползунок до тех пор, пока вы не нажмете последний столбец, затем отпустите клавишу Shift. Нажмите " текст " Затем нажмите кнопку «Готово»

.

Все столбцы будут импортированы как текст, как они были в файле CSV.

Все еще остается проблемой в выпуске Microsoft Office 2016, что вызывает беспокойство у тех из нас, кто работает с такими названиями генов, как MARC1, MARCH1, SEPT1 и т.д.Решение, которое я нашел наиболее практичным после создания файла ".csv" в R, который затем будет открыт / предоставлен пользователям Excel:

  1. Откройте CSV-файл в виде текста (блокнот)
  2. Скопируйте его (ctrl+a, ctrl+c).
  3. Вставьте это в новый лист Excel - все это будет вставлено в один столбец в виде длинных текстовых строк.
  4. Выберите / выделите этот столбец.
  5. Перейдите в раздел Данные- "Текст по столбцам...", в открывшемся окне выберите "с разделителями" (далее).Убедитесь, что отмечена "запятая" (пометка ее уже покажет разделение данных на столбцы ниже) (далее), в этом окне вы можете выбрать нужный столбец и пометить его как текстовый (вместо общего) (Готово).

HTH

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

Добавьте пробел ко всем значениям в csv

Это пространство будет удалено из числа таких номеров, как " 1 & Quot;, & Quot; 2,3 & Quot; и " -2.9e4 & Quot; но останется на даты, подобные " 01/10/1993 & Quot; и логические значения, подобные " TRUE " ;, останавливая их преобразование во внутренние типы данных Excel.

Он также предотвращает защелкивание двойных кавычек при чтении, поэтому надежный способ создания текста в CSV-файле остается неизменным Excel EVEN, если какой-то текст похож на " 3.1415 " состоит в том, чтобы заключить его в двойные кавычки И поставить перед всей строкой пробел, то есть (использовать одинарные кавычки, чтобы показать, что вы вводите) '" 3.1415 "'. Тогда в Excel у вас всегда будет исходная строка, за исключением того, что она заключена в двойные кавычки и начинается с пробела, поэтому вам нужно учитывать их в любых формулах и т. Д.

(при условии, что Excel 2003 ...)

При использовании мастера преобразования текста в столбцы на шаге 3 вы можете указать тип данных для каждого из столбцов. Нажмите на столбец в окне предварительного просмотра и измените неправильный столбец с «Общие». на " Текст. "

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

Измените расширение файла .csv на .txt; это остановит Excel от автоматического преобразования файла при его открытии. Вот как я это делаю: откройте Excel на пустой лист, закройте пустой лист, затем File = > Откройте и выберите файл с расширением .txt. Это заставит Excel открыть " Мастер импорта текста " где он задаст вам вопросы о том, как вы хотите, чтобы он интерпретировал файл. Сначала вы выбираете разделитель (запятая, табуляция и т. Д.), Затем (вот важная часть) вы выбираете набор столбцов столбцов и выбираете форматирование. Если вы хотите именно то, что находится в файле, выберите " Текст " и Excel отобразит только то, что находится между разделителями.

2018

Единственное правильное решение, которое сработало для меня (а также без изменения CSV-файла).

Excel 2010:

  1. Создать новую рабочую книгу
  2. Данные > Из текста > Выберите нужный CSV-файл
  3. Во всплывающем окне выберите переключатель "С разделителями", затем нажмите "Далее >".
  4. Флажки-разделители:отметьте только "Запятую" и снимите флажки с остальных параметров, затем нажмите "Далее >".
  5. В разделе "Предварительный просмотр данных" прокрутите до крайнего правого края, затем удерживайте нажатой клавишу shift и щелкните по последнему столбцу (при этом будут выбраны все столбцы).Теперь в разделе "Формат данных столбца" выберите переключатель "Текст", затем нажмите "Готово".

Excel office365: (клиентская версия)

  1. Создать новую рабочую книгу
  2. Данные > Из текста / CSV > Выберите нужный CSV-файл
  3. Обнаружение типа данных > не обнаруживать

Примечание: Excel office365 (веб-версия), поскольку я пишу это, вы не сможете этого сделать.

(EXCEL 2007 и более поздние версии)

Как заставить Excel не "определять" форматы дат без редактирования исходного файла

Либо:

  • переименуйте файл в .txt
  • Если вы не можете этого сделать, вместо того чтобы открывать CSV-файл непосредственно в Excel, создайте новую книгу, а затем перейдите по ссылке
    Data > Get external data > From Text
    и выберите свой CSV-файл.

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

Ни одно из предложенных здесь решений не является хорошим решением. Это может работать для отдельных случаев, но только если вы контролируете окончательное отображение. Возьмите мой пример: моя работа составляет список продуктов, которые они продают в розницу. Это в формате CSV и содержит коды деталей, некоторые из них начинаются с нуля, установленных производителями (не под нашим контролем). Уберите начальные нули, и вы действительно сможете найти другой продукт. Розничные клиенты хотят получить список в формате CSV из-за внутренних программ обработки, которые также находятся вне нашего контроля и отличаются для каждого клиента, поэтому мы не можем изменить формат файлов CSV. Нет префикса «=», нет добавленных вкладок. Данные в сырых файлах CSV верны; когда клиенты открывают эти файлы в Excel, начинаются проблемы. И многие клиенты не очень разбираются в компьютерах. Они могут просто открыть и сохранить вложение электронной почты. Мы думаем о предоставлении данных в двух немного разных форматах: один как Excel Friendly (используя предложенные выше варианты, добавив TAB, другой как «master»). Но это может быть желательным, так как некоторые клиенты не поймут, почему нам нужно это сделать, и в то же время мы продолжаем объяснять, почему они иногда видят «неправильные» данные в своих таблицах. До тех пор, пока Microsoft не внесет надлежащие изменения, я не вижу надлежащего решения этого вопроса, пока не будет никакого контроля над тем, как конечные пользователи используют файлы.

Для решения этой же проблемы я добавил следующее перед каждым значением csv: & Quot; = & Quot; & Quot; & Quot; и одна двойная кавычка после каждого значения CSV, перед открытием файла в Excel. Возьмите следующие значения, например:

012345,00198475

Их следует изменить перед открытием в Excel, чтобы:

"="""012345","="""00198475"

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

="012345"

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

Пример 1: = ("012345678905") отображается как 012345678905

Пример 2: = (" 1954-12-12 ") отображается как 1954-12-12 , а не 12/12/1954 .

Это не Excel. Windows распознает формулу, данные как дату и автокорректирует. Вы должны изменить настройки Windows.

" Панель управления " (- > " Перейти к классическому виду ") - > " Региональный и языковой Варианты & Quot; - & GT; вкладка " Региональные параметры " - & GT; & Quot; Настройка ... & Quot; - & GT; вкладка "Числа" - & GT; А также затем измените символы в соответствии с тем, что вы хотите.

http: // www. pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html

Он будет работать на вашем компьютере, если эти настройки не будут изменены, например, на компьютере ваших клиентов они будут видеть даты вместо данных.

Привет, у меня та же проблема,

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

Таким образом, вы создаете файл .vbs с приведенным ниже кодом (например, Modify_CSV.vbs), сохраняете и закрываете его. Перетащите исходный файл в файл VBScript. Он создаст новый файл с " SPACE_ADDED " к имени файла в том же месте.

Set objArgs = WScript.Arguments

Set objFso = createobject("scripting.filesystemobject")

dim objTextFile
dim arrStr ' an array to hold the text content
dim sLine  ' holding text to write to new file

'Looping through all dropped file
For t = 0 to objArgs.Count - 1
    ' Input Path
    inPath = objFso.GetFile(wscript.arguments.item(t))

    ' OutPut Path
    outPath = replace(inPath, objFso.GetFileName(inPath), left(objFso.GetFileName(inPath), InStrRev(objFso.GetFileName(inPath),".") - 1) & "_SPACE_ADDED.csv")

    ' Read the file
    set objTextFile = objFso.OpenTextFile(inPath)


    'Now Creating the file can overwrite exiting file
    set aNewFile = objFso.CreateTextFile(outPath, True) 
    aNewFile.Close  

    'Open the file to appending data
    set aNewFile = objFso.OpenTextFile(outPath, 8) '2=Open for writing 8 for appending

    ' Reading data and writing it to new file
    Do while NOT objTextFile.AtEndOfStream
        arrStr = split(objTextFile.ReadLine,",")

        sLine = ""  'Clear previous data

        For i=lbound(arrStr) to ubound(arrStr)
            sLine = sLine + " " + arrStr(i) + ","
        Next

        'Writing data to new file
        aNewFile.WriteLine left(sLine, len(sLine)-1) 'Get rid of that extra comma from the loop


    Loop

    'Closing new file
    aNewFile.Close  

Next ' This is for next file

set aNewFile=nothing
set objFso = nothing
set objArgs = nothing

Без изменения вашего CSV-файла вы можете:

<Ол>
  • Измените параметр "Формат ячеек Excel" на "текст"
  • Затем с помощью " мастера импорта текста " определить ячейки CSV.
  • После импорта удалите эти данные
  • затем просто вставьте как обычный текст
  • excel правильно отформатирует и разделит ваши ячейки csv как текстовые, игнорируя автоматические форматы даты.

    Глупый обходной путь, но он лучше, чем изменение данных CSV перед импортом. Энди Бэйрд и Ричард вроде как ускользнули от этого метода, но пропустили пару важных шагов.

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true;
    $csv = "path\to\your\csv.csv";
    $ex.workbooks.add();
    $ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
    $data = import-csv $csv -encoding utf8 -delimiter ";"; 
    $row = 1; 
    $data | %{ $obj = 

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    function csvToExcel($csv,$delimiter){
         $a = New-Object -com "Excel.Application"
         $a.visible = $true
    
        $a.workbooks.add()
         $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@"
         $data = import-csv -delimiter $delimiter $csv; 
         $array = ($data |ConvertTo-MultiArray).Value
         $starta = [int][char]'a' - 1
         if ($array.GetLength(1) -gt 26) {
             $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta)
         } else {
             $col = [char]($array.GetLength(1) + $starta)
         }
         $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0))
         $range.value2 = $array;
         $range.Columns.AutoFit();
         $range.Rows.AutoFit();
         $range.Cells.HorizontalAlignment = -4131
         $range.Cells.VerticalAlignment = -4160
    }
    
     function ConvertTo-MultiArray {
         param(
             [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)]
             [PSObject[]]$InputObject
         )
         BEGIN {
             $objects = @()
             [ref]$array = [ref]$null
         }
         Process {
             $objects += $InputObject
         }
         END {
             $properties = $objects[0].psobject.properties |%{

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true;
    $csv = "path\to\your\csv.csv";
    $ex.workbooks.add();
    $ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
    $data = import-csv $csv -encoding utf8 -delimiter ";"; 
    $row = 1; 
    $data | %{ $obj = 

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    <*>

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    ; $col = 1;

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    <*>

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    .psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2=

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    <*>

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    <*>

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    ; $col++ }; $row++;}

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    .name} $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count # i = row and j = column $j = 0 $properties |%{ $array.Value[0,$j] =

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true;
    $csv = "path\to\your\csv.csv";
    $ex.workbooks.add();
    $ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
    $data = import-csv $csv -encoding utf8 -delimiter ";"; 
    $row = 1; 
    $data | %{ $obj = 

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    <*>

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    ; $col = 1;

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    <*>

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    .psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2=

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    <*>

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    <*>

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    ; $col++ }; $row++;}

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    .tostring() $j++ } $i = 1 $objects |% { $item =

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true;
    $csv = "path\to\your\csv.csv";
    $ex.workbooks.add();
    $ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
    $data = import-csv $csv -encoding utf8 -delimiter ";"; 
    $row = 1; 
    $data | %{ $obj = 

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    <*>

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    ; $col = 1;

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    <*>

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    .psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2=

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    <*>

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    <*>

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    ; $col++ }; $row++;}

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    $j = 0 $properties | % { if ($item.(

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true;
    $csv = "path\to\your\csv.csv";
    $ex.workbooks.add();
    $ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
    $data = import-csv $csv -encoding utf8 -delimiter ";"; 
    $row = 1; 
    $data | %{ $obj = 

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    <*>

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    ; $col = 1;

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    <*>

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    .psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2=

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    <*>

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

    <*>

    Вы можете использовать приведенный выше код, так как он должен конвертировать любые CSV-файлы в Excel. Просто измените путь к CSV и символу разделителя внизу.

    };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.

    Я знаю, что это старая тема. Для таких, как я, у которых все еще есть эта проблема при использовании Office 2013 через com-объект powershell, можно использовать метод открытого текста . Проблема в том, что этот метод имеет много аргументов, которые иногда взаимоисключающие. Чтобы решить эту проблему, вы можете использовать метод invoke-namedparameter, представленный в этот пост . Примером будет

    $ex = New-Object -com "Excel.Application"
    $ex.visible = $true
    $csv = "path\to\your\csv.csv"
    Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}
    

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

    <*>

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

    В моем случае " 8 сентября " в CSV-файле, созданном с использованием R, был преобразован в "8-Sept" Excel 2013. Эта проблема была решена с помощью функции write.xlsx2 () в пакете xlsx для создания выходного файла в формате xlsx, который может быть загружен в Excel без нежелательного преобразования. Итак, если вам дан файл csv, вы можете попробовать загрузить его в R и преобразовать его в xlsx, используя функцию write.xlsx2 ().

    Обходной путь с помощью Google Диска (или Numbers, если вы находитесь на Mac):

    <Ол>
  • Открыть данные в Excel
  • Установите для формата столбца с неверными данными значение Текст (Формат > Ячейки > Число > Текст)
  • Загрузите файл .csv в Google Диск и откройте его с помощью Google Sheets
  • Скопируйте ошибочный столбец
  • Вставить столбец в Excel как текст (Изменить > Вставить специальный > Текст)
  • В качестве альтернативы, если вы работаете на Mac для шага 3, вы можете открыть данные в Numbers.

    (EXCEL 2016 и более поздние версии, на самом деле я не пробовал в более старых версиях)

    <Ол>
  • Открыть новую пустую страницу
  • Перейти на вкладку "Данные"
  • Нажмите " Из текста / CSV " и выберите свой CSV-файл
  • Проверьте в предварительном просмотре, верны ли ваши данные.
  • В случае, если какой-либо столбец конвертируется в дату, нажмите " изменить " а затем выберите тип текста, нажав на календарь в заголовке столбца
  • Нажмите " Закрыть & amp; Нагрузка & Quot;
  • Хорошо, мы нашли простой способ сделать это в Excel 2003 - 2007. Откройте пустую книгу xls. Затем перейдите в меню «Данные», импортируйте внешние данные. Выберите ваш CSV-файл. Пройдите через мастер, а затем в «столбце формата данных». выберите любой столбец, который нужно принудительно ввести "текст". При этом весь столбец будет импортирован как текстовый формат, что не позволит Excel пытаться обрабатывать какие-либо конкретные ячейки как дату.

    Эта проблема все еще присутствует в Mac Office 2011 и Office 2013, я не могу предотвратить ее возникновение. Это кажется такой простой вещью.

    В моем случае у меня были такие значения, как " 1 - 2 " & Амп; "7-12" в CSV, правильно заключенном в кавычки, это автоматически преобразуется в дату в Excel, если вы попытаетесь впоследствии преобразовать ее в простой текст, вы получите числовое представление даты, например 43768. Кроме того, оно переформатирует большие числа, найденные в штрих-кодах и EAN номера до 123E + снова номера, которые не могут быть преобразованы обратно.

    Я обнаружил, что листы Google на Google Диске не конвертируют числа в даты. Штрих-коды содержат запятые каждые 3 символа, но они легко удаляются. Он очень хорошо справляется с CSV, особенно когда имеешь дело с CSV для MAC / Windows.

    Может, когда-нибудь кого-нибудь спасти.

    САМОЕ ПРОСТОЕ РЕШЕНИЕ Я понял это только сегодня.

    • Открыть в Word
    • Замените все дефисы тире en
    • Сохранить и закрыть
    • Открыть в Excel

    Закончив редактирование, вы всегда можете снова открыть его в Word, чтобы снова заменить тире на дефисы.

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

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

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

    Я сделал этот макрос vba, который в основном форматирует диапазон вывода в виде текста перед вставкой чисел. Прекрасно работает для меня, когда я хочу вставить такие значения, как 8/11, 23/6, 1/3 и т. Д., Без Excel, интерпретируя их как даты.

    Sub PasteAsText()
    ' Created by Lars-Erik Sørbotten, 2017-09-17
    Call CreateSheetBackup
    
    Columns(ActiveCell.Column).NumberFormat = "@"
    
    Dim DataObj As MSForms.DataObject
    Set DataObj = New MSForms.DataObject
    DataObj.GetFromClipboard
    
    ActiveCell.PasteSpecial
    
    End Sub
    

    Мне очень интересно знать, работает ли это и на других людей. Некоторое время я искал решение этой проблемы, но я не видел быстрого решения vba, в котором раньше не было вставки перед входным текстом. Этот код сохраняет данные в исходном виде.

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

    Пример:25/12/2008 становится '25/12/2008

    Вы также можете выбрать тип поля при импорте.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top