2016-07-04 7 views
0

Я использую шаблон XSLT для преобразования и форматирования некоторого вывода из FileMaker в Excel. Он отлично работает для всех, кроме одной колонки. Данные являются числовыми, но должны выводиться в виде строки в формате NN.NN. Поле данных вводится как, например, 04.13, но при выходе в Excel отображается как 4.13. Есть некоторые случаи, когда пользователь имеет вход 04 13 (который выведен из строя правильно, поскольку он не может быть проанализирован как число), но где пользователь правильно вводил данные в filemaker (поле Text), то есть 04.13, мне нужно обеспечить выходные данные остаются в правильном формате.
Я попытался следующие, но не похоже на работу, как и ожидалось - выходной файл по-прежнему отображаются значения столбцов в виде чисел, т.е. теряет ведущего нуля:Fix XSLT Числовой вывод ячейки в Excel как строка

<xsl:choose> 
    <xsl:when test="$xlFieldName='d_Oracle_Task_Code'"> 
     <xsl:variable name="OracleTaskCode" select="fmp:DATA" /> 
     <xsl:value-of select='format-number(OracleTaskCode, "00.00")' />        
    </xsl:when> 
</xsl:choose> 

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

+0

Не префикс значения с апострофом делает его текстом? –

+0

Это да. @ Michael.hor257k. Как я могу применить это через te XSLT? – MartinS

ответ

0

Моя проблема была в том порядке, в котором я проверил. Я не мог заставить XSLT применять форматирование или добавить апостроф, пока не сделаю его, если блокировать первый в моем блоке выбора.

<Style ss:ID="xlTextStyle"> 
    <NumberFormat ss:Format="@"/> 
</Style> 
<xsl:choose> 
<xsl:when test="$xlFieldName='d_Scheme_Task_Code'"> 
    <xsl:attribute name="ss:StyleID">xlTextStyle</xsl:attribute> 
     <Data> 
      <xsl:attribute name="ss:Type">String</xsl:attribute> 
      <xsl:value-of select="." /> 
     </Data> 
</xsl:when> 
<xsl:when test="$xlFieldType='NUMBER'"> 
<xsl:choose> 
<xsl:when test... 

Теперь я получаю значения столбцов, правильно отформатированные в текстовом формате.

+0

Возможно, есть более простой способ приблизиться к этому, но мы не видим контекста. –

1

Попробуйте определить переменную как:

<xsl:variable name="apos">'</xsl:variable> 

затем использовать:

<xsl:value-of select="concat($apos, format-number(OracleTaskCode, '00.00'))" /> 

Другой вариант стоит попробовать бы определить содержимое ячейки как тип данных строки:

<Data ss:Type="String"> 
    .... 
</Data> 

Я боюсь, что у меня нет средств для проверки.

+0

Поле уже устанавливается как type = String, поскольку формат не является датой или номером. У меня есть блок Chose, который форматирует даты, числа и все остальное как строку. Я дам вашу идею попробовать - спасибо. – MartinS

+0

@MartinS Если на ваш вопрос ответили, пожалуйста, закройте его, приняв ответ. –