Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    89

    [VB.NET] - Lettura numero di pagine documento Word

    Ciao a tutti,
    Ho un problema, devo legere da vb.net il numero totale delle pagine di un documento word
    Ho provato con

    wrdApp.ActiveDocument.BuiltInDocumentProperties(Wo rd.WdBuiltInProperty.wdPropertyPages)

    ma mi segnala l'errore

    Cast non valido dal tipo 'DocumentProperty' al tipo 'Short'.

    Non dovrebbe restituirmi il numero delle pagine del documento ?
    Sapete darmi un'alternativa al comando

    Grazie per l'aiuto

  2. #2
    questo errore è dato perchè hai l'opzione Option Strict su On...
    le operazione che puoi fare sono 2:

    - mettere option strict su off;
    - usare trycast(wrdApp.ActiveDocument.BuiltInDocumentPrope rties(Word.WdBuiltInProperty.wdPropertyPages), int16)
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    89
    Grazie andreaciao_22,
    Ho provato con entrambe le soluzioni ma continua a non funzionare.
    Il problema è dovuto al fatto che il risultato dell'istruzione
    wrdApp.ActiveDocument.BuiltInDocumentProperties(Wo rd.WdBuiltInProperty.wdPropertyPages)
    mi da {System.__ComObject}
    e quindi non ho il valore del numero pagina all'interno (l'ho provato in Vba su word registrando una macro ed ho ottenuto il valore desiderato)

    Sai se c'è un altro modo per leggere i numeri di pagina totali dei documentio word ?

    Grazie molte


  4. #4
    mi fai vedere tutto il codice???

    dichiarazione variabile, vari imports, e codice...

    sennò non riesco a capire dov'è l'errore...

    grazie
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    89
    Eccoti il codice

    Option Strict Off

    Imports Word = Microsoft.Office.Interop.Word
    Imports System
    Imports System.IO
    Imports System.Text
    Imports System.Xml
    Imports DBMySql = MySql.Data.MySqlClient

    Public Class frmWord

    Private Sub btnStampaUnione_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStampaUnione.Click
    Dim wrdSelection As Word.Selection
    Dim wrdMailMerge As Word.MailMerge
    Dim wrdMergeFields As Word.MailMergeFields
    Dim strSql As String, strLettera As String = ""
    Dim strConnessione As String = "Persist Security Info=False;" & _
    "Database=" & My.Settings.myDB & ";" & _
    "Data Source=" & My.Settings.myServer & ";" & _
    "User Id=" & My.Settings.myUsername & ";" & _
    "Password=" & My.Settings.myPassword & ";" & _
    "Connect Timeout=15;"
    Dim myCommand As New DBMySql.MySqlCommand(), myCmdLet As New DBMySql.MySqlCommand()
    Dim objConnessione As New DBMySql.MySqlConnection(strConnessione)
    Dim objConnLett As New DBMySql.MySqlConnection(strConnessione)
    Dim ds As New Data.DataSet
    Dim intPagPrec As Int16, intPagLet As Int16, intTotPag As Int16

    If txtPeriodoRif.Text = "" Then
    MsgBox("Inserire periodo di riferimento per la generazione dei file", MsgBoxStyle.Information, "Periodo Riferimento")
    txtPeriodoRif.Focus()
    Exit Sub
    End If

    txtFileWord.Text = "D:\Progetti\NET\Mpx\Test\Invio_" & txtPeriodoRif.Text & "\Lettere_" & txtPeriodoRif.Text & ".doc"

    ' Create an instance of Word and make it visible.
    wrdApp = CreateObject("Word.Application")
    wrdApp.Visible = True

    wrdDoc = wrdApp.Documents.Open(txtLettera.Text)
    wrdDoc.Select()
    wrdMailMerge = wrdDoc.MailMerge()

    ' Create MailMerge Data file.
    strSql = "SELECT ENV_IDLOTTO, ENV_IDLETTERA, ENV_TIPOLETT, ENV_PRATICA, ENV_ADDRESSLINE1," & _
    " ENV_ADDRESSLINE2, ENV_ADDRESSLINE3, ENV_CITY," & _
    " ENV_CAP, ENV_LOCALCODE" & _
    " FROM mpx_envelope" & _
    " WHERE ENV_IDLOTTO = '" & txtIDLotto.Text & "'"
    wrdDoc.MailMerge.OpenDataSource(Name:="", Connection:="DSN=MPX_TEST;", SQLStatement:=strSql, SubType:=Word.WdMergeSubType.wdMergeSubTypeWord200 0)

    wrdMailMerge.Destination = Word.WdMailMergeDestination.wdSendToNewDocument
    wrdMailMerge.Execute(False)

    ' Chiudo il documento originale
    wrdDoc.Close(False)
    wrdDoc = Nothing

    ' Salvo il documento con le lettere
    wrdDoc = wrdApp.Documents(1)
    wrdDoc.SaveAs(txtFileWord.Text)

    ' Memorizzo il numero totale di pagine del documento

    MsgBox(wrdApp.Application.ActiveDocument.BuiltInDo cumentProperties(14))
    intTotPag = TryCast(wrdApp.ActiveDocument.BuiltInDocumentPrope rties(Word.WdBuiltInProperty.wdPropertyPages), Short)

    .......
    End Sub


    End Class
    In grassetto ti ho evidenziato le righe che mi creano problemi.

    Brevemente ti dico cosa devo fare
    Leggo da un Db MySql una serie di informazioni che poi riporto su un documento Word creando delle lettere con la stampa unione.
    Al termine devo recuperare il totale delle pagine che ho generato su Word ma non ci riesco per il problema che ti ho segnalato sopra nel 3d

    Grazie ancora
    Ciao

  6. #6
    ci vedo male o usi: wrdapp.application?

    se wrdapp è già l'applicazione, x' devi mettere anche .application??

    poi prova ad attivare il documento tramite il metodo activate e usa la variabile wrdDoc invece di wrdapp.applicatioon.activedocument.builtinDocument Properties...

    cmq non ho capito se ti va in errore nella msgbox o dove metti il valore nella variabile....

    se posso darti un consiglio, usa il new invece del createobject...
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  7. #7
    leggendo la guida vba di word ho notato che ogni oggetto DocumentProperty di un documento, ha una proprietà value...

    prova ad usare wrddoc.builtindocumentproperties(...).value perchè secondo me, se la proprietà value in vba di word è di default, per vb.net non lo è...

    fammi sapere
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    89
    Sei un GRANDE !!!!
    Ho aggiunto la proprietà '.value' e mi ha restituito il valore che stavo cercando
    Mi sono fatto trarre in inganno da Vb.net che solitamente ti da una mano mostrando,
    quando inserisci il '.' dopo una funzione, le varie opzioni (cosa che in questo caso non ha fatto probabilmente in quanto non riesce ad intercettare tutte le proprietà dell'oggetto word)

    Funziona sia con il documento che con l'application. Ecco di seguito le due istruzioni


    MsgBox(wrdDoc.BuiltInDocumentProperties(Word.WdBui ltInProperty.wdPropertyPages).value)
    MsgBox(wrdApp.ActiveDocument.BuiltInDocumentProper ties(14).value)
    Grazie ancora

  9. #9
    ricordati che l'interoperabilità tra vb.net e i programmi di office rimangono gli stessi...

    mi spiego meglio:

    se tu nel vba di word fai la stessa cosa che hai fatto in vb.net quando fai il . dopo builtindocumentproperties(...) vedrai che non ti uscirà la finestrella dell'intellisense con tutte le proprietà di quell'oggetto..

    questo perchè, negli insiemi, quando metti le parentesi, non è stato implementato l'intellisense...

    l'unica cosa che puoi fare in questi casi è dimensionae una variabile del tipo dell'oggetto e far puntare la variabile all'oggetto.. come in questo esempio:

    codice:
    dim dc as DocumentProperty
    dc = wrdDoc.BuiltInDocumentProperties(Word.WdBuiltInProperty.wdPropertyPages)
    msgbox dc.value
    dc=nothing
    vedrai che magicamente l'intellisense ti apparirà...
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.