Путь разработчика

Сборник полезных примеров и советов для .NET программистов

Таблицы.Формирование документа MS Word программно.

2009-11-11 от Kosten

В прошлой статье мы обсуждали программное формирование документа MS Word. Теперь я хочу показать, как вставить таблицу в такой документ.
Итак, сперва задаются свойства таблицы:

<w:tbl><w:tblPr>
<w:tblW w:w='0' w:type='auto'/><w:tblBorders>
<w:top w:val='single' w:sz='4' wx:bdrwidth='10' w:space='0' w:color='auto'/><w:left w:val='single' w:sz='4' wx:bdrwidth='10' w:space='0' w:color='auto'/><w:bottom w:val='single' w:sz='4' wx:bdrwidth='10' w:space='0' w:color='auto'/>
<w:right w:val='single' w:sz='4' wx:bdrwidth='10' w:space='0' w:color='auto'/><w:insideH w:val='single' w:sz='4' wx:bdrwidth='10' w:space='0' w:color='auto'/><w:insideV w:val='single' w:sz='4' wx:bdrwidth='10' w:space='0' w:color='auto'/></w:tblBorders>
</w:tblPr>

В общем виде таблица состоит из заголовка и данных. Заголовок мы выделим жирным шрифтом. Вставка заголовка:

<w:tr>
<w:tc><w:p><w:r><w:rPr><w:b/></w:rPr><w:t>Заголовок1</w:t></w:r></w:p></w:tc>
<w:tc><w:p><w:r><w:rPr><w:b/></w:rPr><w:t>Заголовок2</w:t></w:r></w:p></w:tc>
...
<w:tc><w:p><w:r><w:rPr><w:b/></w:rPr><w:t>ЗаголовокN</w:t></w:r></w:p></w:tc>
</w:tr>

Заголовок создан. Похожим образом формируются строки с данными.

<w:tr>
<w:tc><w:p><w:r><w:t>Столбец1</w:t></w:r></w:p></w:tc>
<w:tc><w:p><w:r><w:t>Столбец2</w:t></w:r></w:p></w:tc>
...
<w:tc><w:p><w:r><w:t>СтолбецN</w:t></w:r></w:p></w:tc>
</w:tr>

Вот и готовая таблица. Хочу привести пример код на C#, который формирует такую таблицу.

        private string document;
        public void AddTable(ArrayList arHeader, DataTable dtSourceTable)
        {
            document += "<w:tbl><w:tblPr>";
            document += "<w:tblW w:w='0' w:type='auto'/><w:tblBorders>";
            document += "<w:top w:val='single' w:sz='4' wx:bdrwidth='10' w:space='0' w:color='auto'/><w:left w:val='single' w:sz='4' wx:bdrwidth='10' w:space='0' w:color='auto'/><w:bottom w:val='single' w:sz='4' wx:bdrwidth='10' w:space='0' w:color='auto'/>";
            document += "<w:right w:val='single' w:sz='4' wx:bdrwidth='10' w:space='0' w:color='auto'/><w:insideH w:val='single' w:sz='4' wx:bdrwidth='10' w:space='0' w:color='auto'/><w:insideV w:val='single' w:sz='4' wx:bdrwidth='10' w:space='0' w:color='auto'/></w:tblBorders>";
            document += "</w:tblPr>";
            //вставляем шапку таблицы
            AddTableHeader(arHeader);
 
            foreach(DataRow drMyRow in dtSourceTable.Rows)
            {
                AddTableRow(drMyRow);
            }
 
            document += "</w:tbl>";
        }
        private void AddTableRow(DataRow drRow)
        {
            document += "<w:tr>";
            object[] objStrings = drRow.ItemArray;
            for (int i = 0; i < objStrings.Length; i++)
            {
                document += String.Format("<w:tc><w:p><w:r><w:t>{0}</w:t></w:r></w:p></w:tc>", (string) objStrings[i]);
            }
            document += "</w:tr>";
        }
        private void AddTableHeader(ArrayList arHeader)
        {
            document += "<w:tr>";
            foreach (string strHeader in arHeader)
            {
                document += String.Format("<w:tc><w:p><w:r><w:rPr><w:b/></w:rPr><w:t>{0}</w:t></w:r></w:p></w:tc>", strHeader);
            }
            document += "</w:tr>";
        }

В переменной document формируется XML-текст будущего Word документа. Аргументы для функции AddTable - это массив с именами заголовков и набор данных (DataSet) для заполения таблицы.


Узнайте как поднять тиц Вашего сайта или блога.

Со временем Вашему web-приложению станет тесно на виртуальном хостинге - возрастет количество посетителей, объем БД и дискового пространства. Как быть в такой ситуации? Выход прост - аренда выделенного сервера решит все эти проблемы.

Опубликовано Среда, 11-11-2009 в 1:05 пп в рубрики Без рубрики. Вы можете оставить отслеживать комментарии к записи при помощи RSS 2.0 ленты. Вы можете оставить комментарий, или трекбек с Вашего сайта.

Оставить комментарий