Inserire tabelle in word senza interoop

di il
1 risposte

Inserire tabelle in word senza interoop

Buongiorno.
vorrei inserire una tabella in un documento word da codice senza usare intero op.

creo il documento in questo modo:
 Dim oWord As Object
        Dim oDoc As Object
        oWord = CreateObject("Word.Application")

        oDoc = oWord.Documents.Add
        
ora dovrei inserire una table add con l'indicazione di dove e quante righe e colonne voglio.
usassi interoop scriverei qualcosa come
Dim table As WORD.Table = range.Tables.Add(range, 2, 3)
ma in questo caso mi vincolo ad una versione di Word.
Avevo pensato di definire due object, document e range e poi fare createobject, per poter fare poi l'assegnazione, ma mi accetta la create per word.document ma non per word.range.

e' la strada giusta?
per creare un object di tipo range per word, cosa devo indicare?

Grazie

1 Risposte

  • Re: Inserire tabelle in word senza interoop

    La sintassi tra i due metodi non cambia, se lo sai fare con interop lo sai fare anche con object.
    Con l'oggetto non hai l'intellisense, con interop si.
    Per risolvere, programmi con interop e intellisense attivo, che ti aiuta a trovare la giusta sintassi delle istruzioni
     Dim oDoc As New Microsoft.Office.Interop.Word.Application
    prima di distribuire sostistuisci l'istruzione con:
     Dim oDoc As Object = CreateObject("Word.Application")
    Puoi anche automatizzare basta scrivere:
    
    #if (DEBUG)
                Dim oDoc As New Microsoft.Office.Interop.Word.Application
    #else
                Dim oDoc As Object = CreateObject("Word.Application")
    #endif
    
    quando sei in Debug hai l'intellisense e il codice è legato alla tua versione di Office
    quando sei in Release non hai l'intellisense e il codice è slegato dalla tua versione di Office

    Altro vantaggio da non sottovalutare, con object i dati inseriti nelle pagine e loro creazione avvengono ad una velocità doppia. Se il documento è piccolo, la differenza è ininfluente, se il documento è corposo, attendere 10 secondi o 5, cambia.

    Codice di esempio per creare un documento word contenete una tabella, con interop in Debug e object in Release:
    
    Imports System
    Imports System.IO
    Imports WordInteropObject
    Imports Microsoft.Office.Interop.Word
    Imports Microsoft.Office.Interop
    
    Public Class Form1
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            CreaDocumento()
        End Sub
    
        Private Sub CreaDocumento()
    #If (Debug) Then
            Dim oWord As New Microsoft.Office.Interop.Word.Application
            Dim oDoc As Microsoft.Office.Interop.Word.Document = oWord.Documents.Add
    #Else
            Dim oWord As Object = CreateObject("Word.Application")
            Dim oDoc As Object = oWord.Documents.Add
    #End If
    
            Dim PercorsoApp As String = System.Windows.Forms.Application.StartupPath & "\"
            Dim oTable As Object
            ' oWord.Visible = True
    
            Dim intervallo = oDoc.Range(Start:=0, End:=0)
    
            oTable = oDoc.Tables.Add(Range:=intervallo, NumRows:=4, NumColumns:=6)
    
            For rig = 1 To 4
                For col = 1 To 6
                    oTable.Cell(rig, col).Range.Text = "riga " & rig & " colonna " & col
                Next
            Next
    
            If File.Exists(PercorsoApp & "1.doc") Then File.Delete(PercorsoApp & "1.doc")
            oDoc.SaveAs(PercorsoApp & "1.doc")
            oWord.Quit()
        End Sub
        
    End Class
    
    il documento 1.doc viene salvato in ...bin\Release, quando si è in Release e in ...bin\Debug quando si è in Debug
    Gli Imports:
    Imports WordInteropObject
    Imports Microsoft.Office.Interop.Word
    Imports Microsoft.Office.Interop
    in Release non verranno usati, e non serve neanche il riferimento a Microsoft.Office.Interop.Word
    Una versione di Office Word, deve essere installata nel pc in uso.
Devi accedere o registrarti per scrivere nel forum
1 risposte