Создание диаграмм в MS Word с использованием обычных таблиц MS Word - PullRequest
0 голосов
/ 01 октября 2011

Я работаю над программой, которая может генерировать файлы MS Word, содержащие таблицы.

Я хочу спроектировать макрос, который будет брать данные из таблиц, содержащихся в файле MS Word, и создавать из него диаграмму (столбчатые, круговые или линейные диаграммы).

Пока я смог:

  1. Выберите часть таблицы, которая мне нужна для исходных данных,
  2. Вставьте встроенный лист Excel в файл MS Word.

Однако я не могу вставить выбранную часть таблицы во встроенный лист для рисования диаграммы.

Как я могу это сделать?

1 Ответ

4 голосов
/ 09 октября 2011

Решение, приведенное ниже, должно работать для Word 2007 с пакетом обновления 2 (SP2) и Word 2010. Оно было основано на коде, найденном в замечательной статье Питера Грюнбаума «Создание диаграмм с VBA в Word 2010», которую можно прочитать здесь:

Создание диаграмм с VBA в Word 2010

Важно отметить, что для правильной работы этого кода VBA он должен содержать ссылку на библиотеку объектов Microsoft Excel 14.0 (для тех, ктоне знаю, как это сделать, в статье, на которую ссылается выше, подробно объясняется, как добавить эту ссылку).

Sub MakeChartFromTable()

Dim myTable As Table
Dim salesChart As Chart
Dim chartWorkSheet As Excel.Worksheet
Dim x As Integer
Dim RowCount As Integer
Dim ColumnCount As Integer
Dim LastColumn As String

For Each myTable In ActiveDocument.Tables
    myTable.Range.Copy
    'Create Chart
    Set salesChart = ActiveDocument.Shapes.AddChart.Chart
    Set chartWorkSheet = salesChart.ChartData.Workbook.Worksheets(1)
    'Determine size of table
    RowCount = myTable.Rows.Count
    ColumnCount = myTable.Columns.Count
    'Determine spreadsheet column letter for last column of table
    If ColumnCount < 26 Then
        LastColumn = Chr(64 + ColumnCount)
    Else
        LastColumn = Chr(Int(ColumnCount / 26) + 64) & Chr((ColumnCount Mod 26) + 64)
    End If
    'Resize chart data area to table size and paste table data
    With chartWorkSheet
        .ListObjects("Table1").DataBodyRange.Delete
        .ListObjects("Table1").Resize chartWorkSheet.Range("A1:" & LastColumn & RowCount)
        .Range("A1:" & LastColumn & RowCount).Select
        .Paste
    End With
    salesChart.ChartData.Workbook.Close
Next

End Sub

Этот код создает диаграммы из целых таблиц Word, поэтому включает ваш код для выбора частичных таблиц (как указано в вашем вопросе) будет необходимо.Дополнительный код также потребуется для размещения диаграмм в документе Word.Надеюсь, это поможет.

...