Импорт-Excel преобразование столбца в научную c нотацию и искажение значения - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь автоматизировать импорт файла округа и преобразовать его в CSV. Проблема, с которой я сталкиваюсь, заключается в том, что номер учетной записи преобразуется в научное обозначение c.

Import-Excel BacktaxRaw_FL_Flagler2.xlsx | Export-Csv ExportTest.csv

Если я попытался отформатировать числовые поля в текстовые поля, используя

C:\testdata> Import-Excel BacktaxRaw_FL_Flagler.xlsx | Export-Excel ExportTest.xlsx -Show -AutoSize -NumberFormat '@'

. Проблема здесь в том, что номер счета последних нескольких цифр заменяется на ноль. Пример. Исходный номер - «1914310000010100016», импорт преобразует его в «1.9143100000101E + 18, и, наконец, экспорт преобразуется в« 1914310000010100000 ». Как вы видите, 16 в конце заменяется на 00.

По иронии судьбы, если я импортирую данные в новый файл Excel и укажу импорт данных через Excel и определю тип как текст, тогда я могу использовать Import- Excel конвертировать в CSV без проблем. Это говорит мне о том, что Import-Excel пытается импортировать данные из исходного файла Excel. Может ли кто-нибудь помочь мне с этой проблемой, пожалуйста?

Я приложил файл импорта: BacktaxRaw_FL_Flagler.xlsx

После некоторых исследований и благодаря предложениям Рона я сделал глубже погружение, чтобы просмотреть необработанный исходный код вышеуказанного файла. Я разархивировал содержимое файла BacktaxRaw_FL_Flagler.xlsx и перешел в файл \ xl \ worksheets \ sheet1. xml. Я открыл в блокноте и воочию увидел, что ни одно из значений, которые я ищу в столбце А, не хранится в нотации scientifi c. Они на деле хранятся нетронутыми. Это означает, что каждая попытка получить данные привела к повреждению данных. Даже использование собственного мастера импорта данных Excels изменит значения.

Снимок экрана Так что вам не нужно скачивать файл

Если вы хотите, скачайте raw xml файл здесь: Raw XML файл

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Импорт CSV в Excel может иногда приводить вас в бешенство.

Лучше всего загрузить исходный файл CSV и внести в него изменения перед открытием в Excel.

Хитрость заключается в том, чтобы Excel интерпретировал значения для столбца «Номер счета» как строки вместо числовых c значений. Это можно сделать, поставив перед всеми значениями в этом столбце символ табуляции ("t").

$csvFileIn  = 'D:\Test\Report.csv'
$csvFileOut = 'D:\Test\CorrectedReport.csv'
$ColumnName = 'Account Number'

# import the csv file you have downloaded and format the "Account Number"
# column by prefixing the values with a TAB character ("`t").
# this will effectively force Excel NOT to interpret the value as numeric.
$csv = Import-Csv -Path $csvFileIn
foreach ($item in $csv) { $item.$ColumnName = "`t" + $item.$ColumnName }

# save the updated csv file
# the '-UseCulture' switch makes sure the delimiter used is the same that Excel will use on the same system
$csv | Export-Csv -Path $csvFileOut -UseCulture -NoTypeInformation

Теперь вы можете просто дважды щелкнуть файл 'D: \ Test \ CorrectedReport.csv' чтобы открыть в Excel, и это должно быть так:

enter image description here

0 голосов
/ 01 мая 2020

Поведение кажется странным. Тем более, что ячейка Excel, которая хранится в виде текстовой строки, сохранит это свойство, если только что будет открыта в Excel.

Поэтому я углубился в спецификации Open Office XML чуть более подробно.

Внимательно изучив XML документа, выясняется, что документ был создан неправильно. Я подозреваю, что книга xlsx была создана не Excel, а какой-то другой программой.

Если я прав, для рассматриваемой ячейки A3 значение сохраняется как число и в формате общего.

<c r="A3" s="2"><v>1914310000010100016</v></c>

s="2" указывает на общий формат в таблице стилей, и значение сохраняется непосредственно.

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

r="A3" s="1" t="s"><v>10247</v></c>

, где t="s" представляет значение из таблицы строк - на самом деле это 10247-я запись (отсчет на основе 0) из таблицы SharedStrings, которая не даже не существует в исходном xlsx, но будет создан, если вы отформатируете A3 как текст, затем введите номер учетной записи для этой записи и сохраните файл.

Таким образом, вместо проблемы с процессом импорта Я думаю, что есть проблема с фактическим созданием файла xlsx. И что мы не можем это контролировать.

Если проблему с созданием файла не удается исправить, вам потребуется инструмент, не относящийся к Excel, который может редактировать файлы XML, чтобы исправить проблему.

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

...