Заполнить таблицу в шаблоне документа Word C # - PullRequest
2 голосов
/ 11 марта 2012

Кто-нибудь знает хороший способ открыть шаблон текстового документа и заполнить таблицу в нем с помощью программирования на C #?

Ответы [ 3 ]

3 голосов
/ 11 марта 2012

Если бы это был я, это то, что я использовал бы

DOCX

2 голосов
/ 11 марта 2012

Лучший вариант (по крайней мере, для формата docx): http://docx.codeplex.com/

В приведенном ниже сообщении в блоге вы можете найти примеры кода, сравнивающие очень простую манипуляцию документами с DocX, Microsoft OOXML API и классическим Office Interopбиблиотеки: http://cathalscorner.blogspot.com/2010/06/cathal-why-did-you-create-docx.html

0 голосов
/ 12 марта 2012

если вы заинтересованы в коммерческих продуктах и ​​работаете с форматом файла DOCX, вы можете попробовать наш GemBox.Document компонент.

Он имеет собственный механизм чтения / записи и простую модель содержимогои может использоваться без установленного MS Word.

Вот пример кода C #, как создать простой шаблонный документ с таблицей, которая будет расширена данными с помощью функции слияния:

// Use the component in free mode.
ComponentInfo.SetLicense("FREE-LIMITED-KEY");

// Define DataTable with two columns: 'Name' and 'Surname', and fill it with some data.
// You don't have to do this if you already have a DataTable instance.
var dataTable = new DataTable("People")
{
    Columns =
    {
        new DataColumn("Name", typeof(string)),
        new DataColumn("Surname", typeof(string))
    },
    Rows =
    {
        new object[] { "John", "Doe" },
        new object[] { "Fred", "Nurk" },
        new object[] { "Hans", "Meier" },
        new object[] { "Ivan", "Horvat" }
    }
};

// Create and save a template document. 
// You don't have to do this if you already have a template document.
// This code is only provided as a reference how template document should look like.
var document = new DocumentModel();
document.Sections.Add(
    new Section(document,
        new Table(document,
            new TableRow(document,
                new TableCell(document,
                    new Paragraph(document, "Name")),
                new TableCell(document,
                    new Paragraph(document, "Surname"))),
            new TableRow(document,
                new TableCell(document,
                    new Paragraph(document,
                        new Field(document, FieldType.MergeField, "RangeStart:People"),
                        new Field(document, FieldType.MergeField, "Name"))),
                new TableCell(document,
                    new Paragraph(document,
                        new Field(document, FieldType.MergeField, "Surname"),
                        new Field(document, FieldType.MergeField, "RangeEnd:People")))))));
document.Save("TemplateDocument.docx", SaveOptions.DocxDefault);

// Load a template document.
document = DocumentModel.Load("TemplateDocument.docx", LoadOptions.DocxDefault);

// Mail merge template document with DataTable.
// Important: DataTable.TableName and RangeStart/RangeEnd merge field names must match.
document.MailMerge.ExecuteRange(dataTable);

// Save the mail merged document.
document.Save("Document.docx", SaveOptions.DocxDefault);
...