Announcement

Collapse
No announcement yet.

Files via FTP in und von Office laden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Files via FTP in und von Office laden

    Guten Morgen zusammen.

    Ich habe folgende Aufgabenstellung von meinem Chef bekommen.
    Ich soll ein Add-In sowohl für Word, Excel und PowerPoint (Office 2007) basteln, welches beim klicken eines Buttons, sich auf einen FTP Server verbindet, dort die verfügbaren Files abcheckt (also wenn ich von Word aus connecte dann nur Word Dokumente...werde ich wahrscheinlich mit einer Datenbank regeln aber das weiss ich noch net so genau) und ein ausgewähltes File runterlädt.
    Das File soll dann direkt in der entsprechenden Office Applikation geöffnet werden und wenn das File fertig bearbeitet ist und der Benutzer auf den Upload Button klickt, wieder auf den Server geladen werden.
    Die Up und Download Methoden sollten mit My.Computer.Network ja an und für sich recht einfach funktionieren.

    Meine Idee war hier, dass ich das File temporär beim runterladen in einem Arbeitsverzeichnis speichere, wenn das File fertig bearbeitet wurde wird es direkt im Arbeitsverzeichnis überschrieben und wenn der User auf Upload klickt dann wird das File von diesem Arbeitsverzeichnis aus wieder hochgeladen und nach erfolgreichem Upload vom Arbeitsverzeichnis gelöscht.

    Meine Schwierigkeit liegt jetzt darin, wie ich aus dem VB.NET Code (ich verwende by the way Visual Studio 2010) heraus der Office Applikation sagen soll, dass es das File nach erfolgreichem runterladen und speichern im Arbeitsverzeichnis öffnen soll und beim Uploaden das File vorher speichern soll.

    Es geht mir somit konkret nur um die Öffnen und Speichern Methoden von Office Applikationen, denn das Uploaden des Files übernimmt der Source Code ja an sich selbst.

    Any Ideas?

    Grüße
    Oliver

  • #2
    für was eine Datenbank?! Meines Erachtens nicht nötig!

    temporäres Verzeichnis wäre wohl einzige Möglichkeit es sei denn die Interoperation mit Office erlaubt es schon direkt in die Applikation zu streamen.

    Noch etwas du könntest anhand von Hashwertgenerierung Vergleichen ob das Dokument auf dem Server seit den Änderungen am Client verändert wurde. Sprich beim Abholen generierst du einen Hashwert und vor dem Upload vergleichst du das nochmal mit der Datei auf dem Server. Wäre ja ärgerlich wenn zwei Leute ein Dokument verändern und sich gegenseitig Überschreiben!
    Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

    Comment


    • #3
      Hi das-d und danke für deine Antwort.

      An eine Datenbank dachte ich, weil die Benutzer auch Gruppenrechte bekommen müssen. Also die Kundensupporter sollen z.B. nicht die Word Dokumente der Dev´s einsehen können. Bei den Dev´s sollen die Datenbankentwickler auch keine Files der z.B Webdesginer einsehen und so weiter.
      Darum dachte ich, dass eine Datenbank eine kluge Wahl wäre da ich so den Gruppen respektive Usern ganz klar Files zuweisen kann und das Plugin nur jene Files beim Abruf anzeigt, welche den Benutzer respektive dessen Gruppenrichtlinien entsprechen.
      In etwa verständlich was ich meine?

      Weiters kann ich dann auch noch verhindern, dass die Benutzer sich gegenseitig die Files überschreiben, weil ich bei jedem Abruf vom Server eine 1 auf ein Bit Feld "inUse" setzen kann.
      Die Applikation würde ich dann dahingehend entwickeln, dass nur Dateien mit dem Wert 0 bei "inUse" angezeigt und downloadbar gesetzt werden.

      Aber deine Idee mit dem Hashwert ist echt gut. An sowas habe ich noch gar nicht gedacht. Ist von der Implementierung auch keine große Sache.

      Was das direkte Streamen in Office Anwendungen angeht bin ich leider immer noch nicht schlauer geworden. Darum werde ich glaube ich auf die Variante Arbeitsverzeichnis setzen denn direkt in der Office Applikation öffnen geht wunderbar.

      Nur eine Save Methode die vor einem Upload ausgeführt werden soll bereitet mir noch Kopfzerbrechen

      Comment


      • #4
        Juhu ich habs geschafft und es ging denkbar einfach.

        Die Methode, zumindest für Word, möchte ich euch natürlich nicht vorenthalten:

        Public Shared Sub SaveChangedWordDoc(ByVal application As Object)
        Try
        Dim appl, doc As Object
        appl = application
        doc = appl.activedocument
        doc.save()
        Catch ex As Exception

        End Try
        End Sub

        ich übergebe einfach wieder das aktuelle ApplicationObject damit die Methode weiss welche Office App gerade offen ist und dementsprechend greift dann die Save Methode des Dokuments.

        Für Excel und PowerPoint sind die Zuweisungen für "doc" ganz einfach:
        doc = appl.activeworkbook
        doc = appl.activepresentation

        Bin richtig stolz auf mich

        Comment


        • #5
          Ich habe leider ein neuerliches Problem und hoffe wieder auf Hilfe.

          Mein Plugin soll dem User auch ermöglichen ein File, welches er gerade erst lokal erstellt wurde auf den FTP Server zu laden.

          Bekanntlich öffnet sich bei jeder Office Anwendung sobald man auf den Save Button klickt ein SaveFileDialog der einem ermöglicht das File zu bennenen und den Speicherplatz zu bestimmen.

          Wie kann man dieses Event denn über vb.net ausführen?

          Mit meiner Save Methode die ich in meinem vorhergehenden Posting gespeichert habe, wird das File beim debuggen in den Visual Studio Ordner mit dem Standardnamen (Also z.B. Dokument1 oder Mappe1) gespeichert und in der Live Anwendung (also ohne VS im Hintergrund) in c:\Windows\SysWoW64.

          Das möchte ich natürlich vermeiden und Frage deshalb nach, ob jemand weiss wie ich gezielt diesen SaveFileDialog von der Office Application auslösen kann mittels vb.net Code

          Comment


          • #6
            Hallo ratzeputz,

            funktioniert das hier nicht:
            Code:
                        Dim result As New SaveFileDialog
                        result.DefaultExt = "doc"
                        result.Filter = "Word Datei (*.doc)|*.doc"
                        result.CheckPathExists = True
                        result.ShowDialog()

            Comment


            • #7
              hi deroptimist
              danke für deine hilfe...ich hab das ein wenig abgeändert aber die grundidee war gut.
              klappt

              hier meine lösung. der parameter newFile ist deswegen drin, weil ich die methode sowohl für neue files zum speichern als auch für bereits gespeicherte files verwenden will und mir so ein bissi was an code erspare

              Code:
               Public Shared Function SaveChangedWordDoc(ByVal application As Object, ByVal newFile As Boolean) As Boolean
                      Dim correctWork As Boolean = False
                      Try
                          Dim saveDialog As New SaveFileDialog
                          saveDialog.Filter = "Word Document (*.doc)|*.docx"
                          Dim appl, doc As Object
                          appl = application
                          doc = appl.activedocument
                          If newFile Then
                              If saveDialog.ShowDialog = DialogResult.OK Then
                                  doc.saveas(saveDialog.FileName)
                                  correctWork = True
                              End If
              
                          Else
                              doc.save()
                              correctWork = True
                          End If
                      Catch ex As Exception
              
                      End Try
                      Return correctWork
                  End Function
              leider muss ich schon wieder lästig sein mit einem neuen problem.
              und zwar setzen wir auf filezilla als ftp server.
              die user sind hier ja in einem xml file gespeichert.
              um dem admin ein wenig arbeit abzunehmen und jedesmal einen neuen user in der filezilla konsole anlegen zu müssen habe ich mich auch dazu entschlossen eine kleine anwendung zu schreiben die einen neuen user anlegt indem das xml file einfach abgeändert wird.

              jedoch stoße ich hier auf ein problem, dass ich nicht über genügend kenntnisse verfüge um das zu bewerkstelligen. ich weiss, dass ich das xml file mit folgendem code in den speicher bekomme:
              Code:
               Dim xmlDocument As New XmlDocument
                      xmlDocument.Load("C:\Program Files (x86)\FileZilla Server\FileZilla Server.xml")
              wie ich dann aber einzelne knoten in diesem document innerhalb des <User> tags dazu bekomme mit einzelnen parametern ist mir ein rätsel.
              ich kopier euch mal das komplette xml file hier rein damit ihr seht wie das aussieht.
              Code:
              <FileZillaServer>
                  <Settings>
                      <Item name="Admin port" type="numeric">14147</Item>
                  </Settings>
                  <Groups />
                  <Users>
                      <User Name="tester">
                          <Option Name="Pass">f5d1278e8109edd94e1e4197e04873b9</Option>
                          <Option Name="Group"></Option>
                          <Option Name="Bypass server userlimit">0</Option>
                          <Option Name="User Limit">0</Option>
                          <Option Name="IP Limit">0</Option>
                          <Option Name="Enabled">1</Option>
                          <Option Name="Comments"></Option>
                          <Option Name="ForceSsl">0</Option>
                          <IpFilter>
                              <Disallowed />
                              <Allowed />
                          </IpFilter>
                          <Permissions>
                              <Permission Dir="D:\Bibliothek">
                                  <Option Name="FileRead">1</Option>
                                  <Option Name="FileWrite">1</Option>
                                  <Option Name="FileDelete">1</Option>
                                  <Option Name="FileAppend">1</Option>
                                  <Option Name="DirCreate">1</Option>
                                  <Option Name="DirDelete">1</Option>
                                  <Option Name="DirList">1</Option>
                                  <Option Name="DirSubdirs">1</Option>
                                  <Option Name="IsHome">1</Option>
                                  <Option Name="AutoCreate">0</Option>
                              </Permission>
                          </Permissions>
                          <SpeedLimits DlType="0" DlLimit="10" ServerDlLimitBypass="0" UlType="0" UlLimit="10" ServerUlLimitBypass="0">
                              <Download />
                              <Upload />
                          </SpeedLimits>
                      </User>
                  </Users>
              </FileZillaServer>
              anm.: die pfade sind noch lokal von meiner entwicklermaschine da ich ja nicht direkt in der live umgebung arbeiten will/soll.
              und bezüglich passwort, weiss ich natürlich, dass ein md5 hash eingetragen wird aber das ist mittels der vb.net cryptographie kein problem.

              könnt ihr mir hier weiterhelfen

              Comment

              Working...
              X