1

Конечные пользователи системы, которую мы разрабатываем, получают старый CSV-файл, который конечные пользователи будут открывать в MS Excel. Один из столбцов будет содержать записи, которые состоят из строк числовых цифр. Это не числа, а идентификаторы. Мы заметили, что форматирование по умолчанию, применяемое к этому столбцу, приводит к тому, что записи интерпретируются как большие числа, которые впоследствии отображаются в научной записи. Уже, это плохой пользовательский опыт - но подождите, это становится катастрофическим. После сохранения файла данные, по-видимому, интерпретируются как значение с плавающей запятой одинарной точности, и все цифры после 6-го числа полностью усекаются. Если пользователь изменяет форматирование, чтобы столбец отображался правильно перед сохранением, Excel не демонстрирует это поведение и данные не повреждаются при сохранении.

Я обнаружил, что либо (1) изменение формата столбца, либо (2) отключение вычисления формул предотвращают возникновение обеих проблем.

Теперь мой вопрос: возможно ли выполнить одно из вышеуказанных действий или другое действие, которое предотвратит проблемы, отмеченные выше, по умолчанию при открытии файла типа CSV в MS Excel? Обратите внимание, что было бы невероятно трудно продать клиенту согласие с тем, что конечные пользователи должны отключить выполнение формул для всех файлов, включая файлы в формате Excel. Есть ли способ установить глобальные настройки? Какой-то способ настроить, как именно обрабатываются CSV? Какой-нибудь способ распространения макроса среди пользовательских установок Excel, которые запускаются на всех открытых CSV-файлах?

1 ответ1

0

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

// set format of everything to text
Wb.ActiveSheet.UsedRange.NumberFormat = "@";

// disable further formatting - may not be necessary
Wb.ActiveSheet.EnableFormatConditionsCalculation = "false";

// for any existing cells, overwrite the formatted data with the real data, e.g., the formula
Wb.ActiveSheet.UsedRange.Value = Wb.ActiveSheet.UsedRange.Formula;

Это работает для меня в Excel 2010.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .