Что означает атрибут s в теге ячейки в XLSX

В 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>

person chugadie    schedule 01.07.2010    source источник


Ответы (2)


Атрибут 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

person mscccc    schedule 14.07.2010
comment
Но откуда 237? я смотрю в блоге. Он упоминает, что все отсчитывается от нуля, но ссылается на стиль 1, но нигде нет стиля 0-th. Откуда 1? Откуда 237? - person Ian Boyd; 08.11.2013
comment
Это идентификатор стиля в файле styles.xml. Это может быть любое целое число. - person mscccc; 09.11.2013

Атрибут 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>

На данный момент мы не видим, что эта ячейка представляет тип даты. Чтобы понять это, мы должны найти ‹numFmtId› с ключом «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) элемента ‹c›
  2. найдите атрибут numFmtId элемента ‹xf› в файле styles.xml в файле xlsx.
  3. найдите атрибут formatCode ‹numFmt›, который имеет numFmtId в качестве ключа
  4. посмотреть, является ли формат форматом даты или числовым форматом

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

person schlebe    schedule 21.07.2017