none
Как сохранить данные из массива в документ MS Word? Использую VB.Net. RRS feed

  • Вопрос

  • Как сохранить данные из массива в MS Word? Использую VB.Net.

     

    Вот мои скромные попытки сделать это в Exel. Подскажите, пожалуйста, как сделать таблицу в Word? Средствами VB.Net. Ясное дело, что какой-то офис должен быть установлен. Кстати, как организовать проверку на наличие Офиса с установленным MS Word?

     

    'Пересохраняю в масив

    Dim DataArray(0 To 33, 0 To 9) As Array

     

    For y As Integer = 0 To 32

    For x As Integer = 0 To 8

     

    DataArray.SetValue(Form3.DataGridView1.Item(x, y), y, x)

     

    Next x

    Next y

     

    'Запись в xls файл (Exel)

    Dim oExcel As Object

    Dim oBook As Object

    Dim oSheet As Object

     

    'Открыть новую книгу Excel

    oExcel = CreateObject("Excel.Application")

    oBook = oExcel.Workbooks.Add

     

    'Добавить данные в ячейки первого листа новой книги

    oSheet = oBook.Worksheets(1)

     

    oSheet.Range("A1").Value = "Гистограмма"

    'Передать массив на лист, начиная с ячейки A2

    oSheet.Range("A2").Resize(32, 8).Value = DataArray

     

    'Сохранить книгу и закрыть Excel

    oBook.SaveAs("g:\Book1.xls")

    oExcel.Quit()

    End Sub

     

    Спасибо, за внимание и участие.

    6 июля 2011 г. 19:27

Ответы

  • Здравствуйте.

    О том как создавать и работать с таблицами в Microsoft Word смотрите раздел на MSDN - Работа с таблицами.


    Для связи [mail]
    • Помечено в качестве ответа sg6336 7 июля 2011 г. 13:08
    7 июля 2011 г. 12:52
  • Вот составил рабочий код, который может служить отправной точкой для создания документа Word.

    Сначала нужно выполнить следующее действие:

    Проект -> Добавить ссылку… -> .Net -> Microsoft.Office.Interop.Word

    После этого код будет работать.

     

    На форме создаем одну кнопку Button1, а в код формы кидаем все следующее:

    Imports Microsoft.Office.Interop

    Imports Microsoft.Office.Interop.Word

    Public Class Form1

     

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            Dim oWord As Word.Application

            Dim oDoc As Word.Document

            Dim oTable As Word.Table

            Dim oPara1 As Word.Paragraph, oPara2 As Word.Paragraph

            Dim oPara3 As Word.Paragraph, oPara4 As Word.Paragraph

            Dim oRng As Word.Range

            Dim oShape As Word.InlineShape

            Dim oChart As Object

            Dim Pos As Double

     

            'Start Word and open the document template.

            oWord = CreateObject("Word.Application")

            oWord.Visible = True

            oDoc = oWord.Documents.Add

     

            'Insert a paragraph at the beginning of the document.

            oPara1 = oDoc.Content.Paragraphs.Add

            oPara1.Range.Text = "Heading 1"

            oPara1.Range.Font.Bold = True

            oPara1.Format.SpaceAfter = 24    '24 pt spacing after paragraph.

            oPara1.Range.InsertParagraphAfter()

     

            'Insert a paragraph at the end of the document.

            '** \endofdoc is a predefined bookmark.

            oPara2 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks("\endofdoc").Range)

            oPara2.Range.Text = "Heading 2"

            oPara2.Format.SpaceAfter = 6

            oPara2.Range.InsertParagraphAfter()

     

            'Insert another paragraph.

            oPara3 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks("\endofdoc").Range)

            oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:"

            oPara3.Range.Font.Bold = False

            oPara3.Format.SpaceAfter = 24

            oPara3.Range.InsertParagraphAfter()

     

            'Insert a 3 x 5 table, fill it with data and make the first row

            'bold,italic.

            Dim r As Integer, c As Integer

            oTable = oDoc.Tables.Add(oDoc.Bookmarks("\endofdoc").Range, 3, 5)

            oTable.Range.ParagraphFormat.SpaceAfter = 6

            For r = 1 To 3

                For c = 1 To 5

                    oTable.Cell(r, c).Range.Text = "r" & r & "c" & c

                Next

            Next

            oTable.Rows(1).Range.Font.Bold = True

            oTable.Rows(1).Range.Font.Italic = True

     

            'Add some text after the table.

            'oTable.Range.InsertParagraphAfter

            oPara4 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks("\endofdoc").Range)

            oPara4.Range.InsertParagraphBefore()

            oPara4.Range.Text = "And here's another table:"

            oPara4.Format.SpaceAfter = 24

            oPara4.Range.InsertParagraphAfter()

     

            'Insert a 5 x 2 table, fill it with data and change the column widths.

            oTable = oDoc.Tables.Add(oDoc.Bookmarks("\endofdoc").Range, 5, 2)

            oTable.Range.ParagraphFormat.SpaceAfter = 6

            For r = 1 To 5

                For c = 1 To 2

                    oTable.Cell(r, c).Range.Text = "r" & r & "c" & c

                Next

            Next

            oTable.Columns(1).Width = oWord.InchesToPoints(2)   'Change width of columns 1 & 2.

            oTable.Columns(2).Width = oWord.InchesToPoints(3)

     

            'Keep inserting text. When you get to 7 inches from top of the

            'document, insert a hard page break.

            Pos = oWord.InchesToPoints(7)

            oDoc.Bookmarks("\endofdoc").Range.InsertParagraphAfter()

            Do

                oRng = oDoc.Bookmarks("\endofdoc").Range

                oRng.ParagraphFormat.SpaceAfter = 6

                oRng.InsertAfter("A line of text")

                oRng.InsertParagraphAfter()

            Loop While Pos >= oRng.Information(Word.WdInformation.wdVerticalPositionRelativeToPage)

            oRng.Collapse(WdCollapseDirection.wdCollapseEnd)

            oRng.InsertBreak(Word.WdBreakType.wdPageBreak)

            oRng.Collapse(Word.WdCollapseDirection.wdCollapseEnd)

            oRng.InsertAfter("We're now on page 2. Here's my chart:")

            oRng.InsertParagraphAfter()

     

            'Insert a chart and change the chart.

            oShape = oDoc.Bookmarks("\endofdoc").Range.InlineShapes.AddOLEObject( _

                ClassType:="MSGraph.Chart.8", FileName _

                :="", LinkToFile:=False, DisplayAsIcon:=False)

            oChart = oShape.OLEFormat.Object

            oChart.charttype = 4 'xlLine = 4

            oChart.Application.Update()

            oChart.Application.Quit()

            '... If desired, you can proceed from here using the Microsoft Graph

            'Object model on the oChart object to make additional changes to the

            'chart.

            oShape.Width = oWord.InchesToPoints(6.25)

            oShape.Height = oWord.InchesToPoints(3.57)

     

            'Add text after the chart.

            oRng = oDoc.Bookmarks("\endofdoc").Range

            oRng.InsertParagraphAfter()

            oRng.InsertAfter("THE END.")

     

            'All done. Unload this form.

            'Unload(Me)

            System.Windows.Forms.Application.Exit()

     

        End Sub

    End Class

     

    Глубоко не разбирался, но похоже, что этот код работает и со старыми версиями Word. А в приведённой Вами ссылке только с 2007 и 2010.


    А кому интересно, то вот ссылки:

    http://support.microsoft.com/kb/313193/ru

    http://msdn.microsoft.com/en-us/library/Aa201332

    • Помечено в качестве ответа sg6336 10 июля 2011 г. 17:36
    10 июля 2011 г. 17:36

Все ответы

  • Здравствуйте.

    О том как создавать и работать с таблицами в Microsoft Word смотрите раздел на MSDN - Работа с таблицами.


    Для связи [mail]
    • Помечено в качестве ответа sg6336 7 июля 2011 г. 13:08
    7 июля 2011 г. 12:52
  • Вот составил рабочий код, который может служить отправной точкой для создания документа Word.

    Сначала нужно выполнить следующее действие:

    Проект -> Добавить ссылку… -> .Net -> Microsoft.Office.Interop.Word

    После этого код будет работать.

     

    На форме создаем одну кнопку Button1, а в код формы кидаем все следующее:

    Imports Microsoft.Office.Interop

    Imports Microsoft.Office.Interop.Word

    Public Class Form1

     

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            Dim oWord As Word.Application

            Dim oDoc As Word.Document

            Dim oTable As Word.Table

            Dim oPara1 As Word.Paragraph, oPara2 As Word.Paragraph

            Dim oPara3 As Word.Paragraph, oPara4 As Word.Paragraph

            Dim oRng As Word.Range

            Dim oShape As Word.InlineShape

            Dim oChart As Object

            Dim Pos As Double

     

            'Start Word and open the document template.

            oWord = CreateObject("Word.Application")

            oWord.Visible = True

            oDoc = oWord.Documents.Add

     

            'Insert a paragraph at the beginning of the document.

            oPara1 = oDoc.Content.Paragraphs.Add

            oPara1.Range.Text = "Heading 1"

            oPara1.Range.Font.Bold = True

            oPara1.Format.SpaceAfter = 24    '24 pt spacing after paragraph.

            oPara1.Range.InsertParagraphAfter()

     

            'Insert a paragraph at the end of the document.

            '** \endofdoc is a predefined bookmark.

            oPara2 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks("\endofdoc").Range)

            oPara2.Range.Text = "Heading 2"

            oPara2.Format.SpaceAfter = 6

            oPara2.Range.InsertParagraphAfter()

     

            'Insert another paragraph.

            oPara3 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks("\endofdoc").Range)

            oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:"

            oPara3.Range.Font.Bold = False

            oPara3.Format.SpaceAfter = 24

            oPara3.Range.InsertParagraphAfter()

     

            'Insert a 3 x 5 table, fill it with data and make the first row

            'bold,italic.

            Dim r As Integer, c As Integer

            oTable = oDoc.Tables.Add(oDoc.Bookmarks("\endofdoc").Range, 3, 5)

            oTable.Range.ParagraphFormat.SpaceAfter = 6

            For r = 1 To 3

                For c = 1 To 5

                    oTable.Cell(r, c).Range.Text = "r" & r & "c" & c

                Next

            Next

            oTable.Rows(1).Range.Font.Bold = True

            oTable.Rows(1).Range.Font.Italic = True

     

            'Add some text after the table.

            'oTable.Range.InsertParagraphAfter

            oPara4 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks("\endofdoc").Range)

            oPara4.Range.InsertParagraphBefore()

            oPara4.Range.Text = "And here's another table:"

            oPara4.Format.SpaceAfter = 24

            oPara4.Range.InsertParagraphAfter()

     

            'Insert a 5 x 2 table, fill it with data and change the column widths.

            oTable = oDoc.Tables.Add(oDoc.Bookmarks("\endofdoc").Range, 5, 2)

            oTable.Range.ParagraphFormat.SpaceAfter = 6

            For r = 1 To 5

                For c = 1 To 2

                    oTable.Cell(r, c).Range.Text = "r" & r & "c" & c

                Next

            Next

            oTable.Columns(1).Width = oWord.InchesToPoints(2)   'Change width of columns 1 & 2.

            oTable.Columns(2).Width = oWord.InchesToPoints(3)

     

            'Keep inserting text. When you get to 7 inches from top of the

            'document, insert a hard page break.

            Pos = oWord.InchesToPoints(7)

            oDoc.Bookmarks("\endofdoc").Range.InsertParagraphAfter()

            Do

                oRng = oDoc.Bookmarks("\endofdoc").Range

                oRng.ParagraphFormat.SpaceAfter = 6

                oRng.InsertAfter("A line of text")

                oRng.InsertParagraphAfter()

            Loop While Pos >= oRng.Information(Word.WdInformation.wdVerticalPositionRelativeToPage)

            oRng.Collapse(WdCollapseDirection.wdCollapseEnd)

            oRng.InsertBreak(Word.WdBreakType.wdPageBreak)

            oRng.Collapse(Word.WdCollapseDirection.wdCollapseEnd)

            oRng.InsertAfter("We're now on page 2. Here's my chart:")

            oRng.InsertParagraphAfter()

     

            'Insert a chart and change the chart.

            oShape = oDoc.Bookmarks("\endofdoc").Range.InlineShapes.AddOLEObject( _

                ClassType:="MSGraph.Chart.8", FileName _

                :="", LinkToFile:=False, DisplayAsIcon:=False)

            oChart = oShape.OLEFormat.Object

            oChart.charttype = 4 'xlLine = 4

            oChart.Application.Update()

            oChart.Application.Quit()

            '... If desired, you can proceed from here using the Microsoft Graph

            'Object model on the oChart object to make additional changes to the

            'chart.

            oShape.Width = oWord.InchesToPoints(6.25)

            oShape.Height = oWord.InchesToPoints(3.57)

     

            'Add text after the chart.

            oRng = oDoc.Bookmarks("\endofdoc").Range

            oRng.InsertParagraphAfter()

            oRng.InsertAfter("THE END.")

     

            'All done. Unload this form.

            'Unload(Me)

            System.Windows.Forms.Application.Exit()

     

        End Sub

    End Class

     

    Глубоко не разбирался, но похоже, что этот код работает и со старыми версиями Word. А в приведённой Вами ссылке только с 2007 и 2010.


    А кому интересно, то вот ссылки:

    http://support.microsoft.com/kb/313193/ru

    http://msdn.microsoft.com/en-us/library/Aa201332

    • Помечено в качестве ответа sg6336 10 июля 2011 г. 17:36
    10 июля 2011 г. 17:36