Таблицы.Формирование документа 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 ленты. Вы можете оставить комментарий, или трекбек с Вашего сайта.