none
WebPart e Word RRS feed

  • Domanda

  • ·         Ciao a tutti,

    ho fatto una WebPart per Sharepoint 2010 nella quale c'è una GridView in cui tramite una DropDownList si seleziona una voce che apre un documento di Word, il problema è proprio questo: Word non parte. Lo stesso codice che apre il doc di word se lo lancio da una normale app asp.net funziona, nel senso che le modifiche che faccio al documento di word sono fatte e salvate però Word rimane dietro le quinte anche se ho settato Visible = true. Il codice che uso è:

    Application ap = new Application();

    try

    {

        Document doc = ap.Documents.Open( @"D:\TestDoc.docx", ReadOnly: false, Visible: true );

        doc.Activate();

        Selection sel = ap.Selection;

        ContentControls ccList = doc.ContentControls;

        foreach (ContentControl ctrl in ccList)

        {

            ctrl.Range.Text ="WORD: CONTENT TYPE C#";

            MessageBox(ctrl.Title);

        }

        if ( sel != null )

        {

            switch ( sel.Type )

            {

                case WdSelectionType.wdSelectionIP:

                sel.TypeText(DateTime.Now.ToString() );

                sel.TypeParagraph();

                break;

                default:

                MessageBox("Tipo di selezione non gestita; nessuna modifica apportata.");

                break;

            }

            // rimuove tutti i meta data.

            // doc.RemoveDocumentInformation( WdRemoveDocInfoType.wdRDIAll );

            ap.Documents.Save( NoPrompt:true, OriginalFormat: true );

        }

        else

        {

            MessageBox("Selezione non definita; nessuna modifica apportata.");

        }

        ap.Documents.Close( SaveChanges:false, OriginalFormat: false, RouteDocument: false );

    }

    catch ( Exception ex )

    {

        MessageBox("Eccezione: " + ex.Message); // documento già aperto, word già avviato, ...

    }

    finally

    {

        // Ambiguity between method 'Microsoft.Office.Interop.Word._Application.Quit(ref object, ref object, ref object)' and non-method 'Microsoft.Office.Interop.Word.ApplicationEvents4_Event.Quit'. Using method group.

        // ap.Quit( SaveChanges: false, OriginalFormat: false, RouteDocument: false );

        ( (_Application)ap ).Quit( SaveChanges: false, OriginalFormat: false, RouteDocument: false );

        System.Runtime.InteropServices.Marshal.ReleaseComObject( ap );

    }

    Il problema rimane anche se tolgo il 'quit' della clausola Finally.

    Un problema è che se eseguo questo codice da sharepoint allora:

    Document doc = ap.Documents.Open( @"D:\TestDoc.docx", ReadOnly: false, Visible: true );

    mi restituisce NULL. Mentre dall'applicazione ASP.NET viene valorizzato correttamente. L'unico problema dall'applicazione asp.net è che Word non si vede ma rimane nascosto.

    grazie

    stefano

    • Modificato Mila Daniel Ovidiu martedì 16 novembre 2010 08:53 formattazione messaggio e codice
    giovedì 11 novembre 2010 11:59

Risposte

Tutte le risposte

  • Ciao !
    Io su MOSS 2007 avevo settato i settings DCOM per Word ed eseguivo il codice sotto permessi elevati (SPSecurity.RunWithEvelatedPrivileges).
    Su 2010 non ho mai provato, però qui c'è un post che parla proprio del problema che hai anche tu:
    http://social.msdn.microsoft.com/Forums/en/sharepoint2010general/thread/0c6f25bb-e656-4ccd-9a59-dc9b519ca9ec

    E' vero che non c'è risuoluzione ancora, ma intanto hai due cose da provare. ;)


    Giuseppe Marchi - SharePoint MVP
    www.peppedotnet.it
    www.dev4side.com
    www.sharepointcommunity.it
    Twitter: @PeppeDotNet
    giovedì 11 novembre 2010 12:46
  • Ciao,

    ho provato ad eseguire il codice via SPSecurity.RunWithEvelatedPrivileges ma non cambia niente però in DCOM Config non trovo WORD! C'è Excel, Access etc. etc. ma non Word. Seguendo il post che mi hai indicato (e tra un link e l'altro verso altri posts ...) ho trovato che una soluzione potrebbe essere la creazione di un folder Desktop nel path seguente: C:\Windows\SysWOW64\config\systemprofile, ho provato ma non mi risolve il problema. La soluzione per me è stata quella della modifica del registro e cioè sostituire il valore della chiave:

    HKEY_LOCAL_MACHINE -> SOFTWARE -> Microsoft ->  Windows NT -> CurrentVersion -> ProfileList -> S-1-5-18 -> ProfileImagePath

    con quella di un utente S-1-5-21-nnn

    Così funziona! Nel senso che non ho più il riferimento NULL per Document doc = ap.Documents.Open(pathTemplate, ReadOnly: false, Visible: true);

    Però (c'è sempre un però ...) WORD non si visualizza rimane nascosto, le modifiche al file vengono fatte e salvate ma al 'buio' anche se ho messo Visible: true.

    grazie

    stefano

     

    venerdì 12 novembre 2010 09:38