Импорт листа Excel в DataTable - PullRequest
       5

Импорт листа Excel в DataTable

0 голосов
/ 12 февраля 2011

Мне нужно импортировать содержимое файла Excel в DataTable, где первая строка Excel ведет себя как строка заголовка.Я не могу использовать OleDB, потому что он изменяет данные при импорте, поэтому лучше всего сделать этот импорт с помощью Excel Interop (у меня установлен Excel на машине), но я не хочу импортировать значение ячейки, носвойство текста ячейки.Причина в том, что у меня есть коды типа «543523564537567457657567345» в файле Excel, которые не отформатированы для определенного типа, и если я импортирую значение, вероятно, будет преобразовано в экспоненциальное число.

Другая вещьв том, что я хочу быть настолько быстрым, насколько это возможно.(в моем предыдущем взаимодействии он был намного медленнее импорта oleDB)

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

Большое спасибо!

1 Ответ

0 голосов
/ 13 февраля 2011

Из спецификаций Excel 2003 страница максимальная точность составляет 15 цифр.Если при вводе в Excel значение 543523564537567457657567345 не обрабатывалось как текст, то лучшее, что вы сможете получить, - это 5.43523564537567E + 26.Свойство Text показывает отображаемое значение ячейки со ссылкой на текущий числовой формат, тогда как свойство Value показывает фактическое сохраненное значение.Ни один из них не может быть использован для восстановления потерянной точности, превышающей ограничение в 15 цифр.

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

Просмотр сохраненного значения в XML, полученном из электронной таблицы, также покажет вам базовые данные.В этом примере я сохранил одно и то же значение в A1 и A2, но A1 рассматривалось как число, тогда как A2 обрабатывалось как текст, и вы можете увидеть разницу во фрагменте XML ниже (посмотрите на параметры ss:Type и x:Ticked- см. здесь ):

<Worksheet ss:Name="Sheet2">
  <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="2">
   <Row>
    <Cell><Data ss:Type="Number">5.4352356453756703E+26</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String" x:Ticked="1">543523564537567457657567345</Data></Cell>
   </Row>
  </Table>
 </Worksheet>

Обратите внимание, чтобы быстро сгенерировать XML для конкретного Range в Excel, получить доступ к свойству Value как обычно, но передать параметр xlRangeValueXMLSpreadsheetили его целочисленный эквивалент 11

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...