Что означает атрибут "s" в теге ячейки в XLSX - PullRequest
11 голосов
/ 01 июля 2010

В XML листа в файле XLSX (Excel 2007) теги ячеек, у которых атрибут «t» равен «s», являются строковыми типами. Тег значения внутри c должен быть найден и преобразован через документ sharedStrings. Но некоторые ячейки имеют s = "237" и вообще не имеют атрибута t. Тег значения имеет целое число, например 39448, которое не относится к документу sharedStrings. Значение в том виде, в каком оно отображается в Excel, является датой 01.01.2008.

Что означает атрибут s в теге c в XLSX?

Неизвестное значение

<c r="B47" s="237">
    <v>39448</v>
</c>

Значение общей строки

<c r="C47" t="s">
    <v>7</v>
</c>

Ответы [ 2 ]

7 голосов
/ 14 июля 2010

Атрибут s относится к стилю. «237» - это стиль, определенный в файле styles.xml.

<v>39448</v>

... скорее всего дата в двойном формате. И стиль 237 говорит Excel, чтобы отображать 39448 в формате даты.

Вы можете увидеть пример того, как это работает здесь: http://blogs.msdn.com/b/brian_jones/archive/2007/05/29/simple-spreadsheetml-file-part-3-formatting.aspx

2 голосов
/ 21 июля 2017

Атрибут s указывает, что равен 237, указывает на 237-й элемент, найденный в родительском элементе в файле styles.xml, содержащемся в файле xlsx.

Если значение ячейки является датой, элемент может быть похож на следующий код

<xf numFmtId="167" 
    fontId="6" 
    fillId="0" 
    borderId="6" 
    xfId="3" 
    applyNumberFormat="1" 
    applyFont="1" 
    applyFill="1" 
    applyBorder="1" 
    applyAlignment="1">
        <alignment horizontal="center"/>
</xf>

На данный момент мы не видим, чтобы эта ячейка представляла тип даты. Чтобы понять это, мы должны найти с ключом "167".

Это значение можно найти в начале файла styles.xml

<numFmts count="7">
    <numFmt numFmtId="164" formatCode="[$-409]d\-mmm\-yy;@"/>
    <numFmt numFmtId="165" formatCode="0.000"/>
    <numFmt numFmtId="166" formatCode="0.0"/>
    <numFmt numFmtId="167" formatCode="[$-409]d\-mmm\-yyyy;@"/>
    <numFmt numFmtId="168" formatCode="0.0%"/>
    <numFmt numFmtId="169" formatCode="00000"/>
    <numFmt numFmtId="170" formatCode="0.0000"/>
</numFmts>

Строка с numFmtId = "167" указывает, что значением ячейки является дата, отформатированная с использованием следующей строки "[$ -409] d-mmm-yyyy; @"

В резюме, чтобы узнать, содержит ли ячейка число или дату, мы должны

  1. найти атрибут S (= style) элемента
  2. найдите атрибут numFmtId элемента в файле styles.xml в файле xlsx.
  3. найдите атрибут formatCode , для которого в качестве ключа указан * numFmtId
  4. посмотреть, является ли формат форматом даты или числа

Я надеюсь, что это может помочь другим.

...