Может кто-нибудь подтвердить, как Microsoft Excel 2007 внутренне представляет числа? - PullRequest
5 голосов
/ 12 мая 2010

Я знаю стандарт IEEE 754 с плавающей запятой наизусть, так как мне пришлось выучить его на экзамене. Я точно знаю, как используются числа с плавающей запятой и какие проблемы у них могут возникнуть. Я могу вручную выполнить любую операцию над двоичным представлением чисел с плавающей запятой.

Однако я не нашел ни одного источника, который бы однозначно утверждал, что в Excel используются 64-битные числа с плавающей запятой для внутреннего представления каждого "типа" каждой ячейки в Excel, за исключением текста. Я понятия не имею, используют ли некоторые типы целые числа со знаком или без знака, а некоторые используют 64-разрядные числа с плавающей запятой.

Я нашел буквально триллионы статей, которые 1) описывают числа с плавающей запятой, а затем 2) говорят о том, чтобы быть осторожнее с Excel из-за чисел с плавающей запятой. Я не нашел ни одного утверждения, говорящего «все типы являются 64-битными числами с плавающей запятой, кроме текста». Я не нашел ни одного утверждения, которое говорит, что «изменение типа ячейки изменяет только ее визуальное представление, а не ее внутреннее представление, если вы не измените тип с текста на другой тип, который не является текстовым, или вы не измените другой тип, который является не текст в текст ".

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

Ответы [ 3 ]

3 голосов
/ 12 мая 2010

Excel 2007 поддерживает формат OpenXML, который представляет собой ZIP-файл (.XLSX), содержащий несколько файлов XML. Существует SDK для работы с форматом OpenXML, вы можете получить документы для него здесь и загрузить его здесь .

В основном числа хранятся в виде простого текста внутри элемента, поэтому, если ячейка A1 имеет номер 42, а ячейка A2 имеет номер 81,56 в пользовательском интерфейсе, XML будет выглядеть как следующий фрагмент XML:

<row r="1" spans="1:2">
    <c r="A1">
        <v>42</v>
    </c>
    <c r="B1">
        <v>81.569999999999993</v>
    </c>
</row>

При работе с OpenXML я настоятельно рекомендую просто использовать SDK и не использовать его самостоятельно.

3 голосов
/ 12 мая 2010

Эта страница содержит ссылку на внутренние типы данных Excel.

0 голосов
/ 12 мая 2010

Он сохранил числа как двойные.

...