Файлы Excel с диаграммами и без.

Excel таблицы создавать проще чем казалось бы. Нынешние MS Office средства позволяют создавать подобные таблицы с диаграммами используя симбиоз технологий HTML + XML+ VML

Итак. Для создания простой таблицы с данными создаём файл, который содержит:

<html>
  <body>
    <table>
      <tr>
        <td>1</td>
      </tr>
      <tr>
        <td>2</td>
      </tr>
      <tr>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
      </tr>
    </table>
  </body>
</html>

Сохраним файл под именем excelfile.xls, откроем его с помощью MS Excel и получим результат:

Excel file

Как видно - результат ничем не отличается от варианта создания файла в самом MS Excel за исключением разграничения ячеек сероватым стандартным цветом. Для того, чтобы исправить этот “баг” (или фичу) вносим следующие правки:

<body style="border:.5pt solid silver;">

excel file with borders

Для того, чтобы использовать формулы в таблицах - определяем xml namespace urn:schemas-microsoft-com:office:excel:

<html
    xmlns:x="urn:schemas-microsoft-com:office:excel">

Далее пример использования функции SUM (сумма) и простого сложения значений ячеек с использованием нового аттрибута x:fmla:

<html
     xmlns:x="urn:schemas-microsoft-com:office:excel">
  <body style="border:.5pt solid silver;">
    <table>
      <tr>
        <td>1</td>
      </tr>
      <tr>
        <td>2</td>
      </tr>
      <tr>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
      </tr>
      <tr>
      	<td style="width: 48pt"
             x:fmla="=SUM(A1:A4)"></td>
      </tr>
      <tr>
        <td x:fmla="=A1+A2"></td>
      </tr>
    </table>
  </body>
</html>

Я добавил ещё определение ширины для ячейки, где выводится сумма style=”width: 48pt” (48pt - это стандартная ширина ячейки в excel):

Excel file with formula

Добавляем диаграмму:
Дописываем ещё один namespace:

<html xmlns:x="urn:schemas-microsoft-com:office:excel"
        xmlns:v="urn:schemas-microsoft-com:vml">

И после определения таблицы дописываем кусок xml кода


Это минимальный набор инструкций, которых необходимо для корректного отображения диаграммы. При просмотре XML всё становится понятным из названий тегов. Что на мой взгляд может показаться непонятным:

  • x:ClientData ObjectType=”Chart” - эта инструкция говорит о том, что это и есть именно диаграмма, а не другой какой-нибудь объект
  • Scaling - тут указываются два блока определений Scaling, для горизонтальной и вертикальной оси, MaxMin можно заменить на MinMax, тогда данные будут “отсортированы” от минимального к максимальному
  • x:DataSource - если DataSource равен 0, значит данные будут браться по указанной в x:Data ссылке из листа данных, если же равен -1, но данные записываются прямо в x:Data
  • x:Type - тут указывается тип диаграммы. В нашем случае это Line. Может быть например Bar, Pie и др.
  • Для добавления ещё одной линии данных нужно продублировать блок x:Series соответственно изменив блок с данными

Excel file with diagram

Пример созданного файла: excelfile.zip

Leave a Reply