This forum is read-only - Please use our new Citavi Forum instead.
Dieses Forum dient nur zur Recherche - Bitte nutzen Sie das neue Citavi Forum für Ihre Fragen.

Dateiliste ausgewählter Titel Topic is solved

Schlagen Sie neue Funktionen vor. Wir sind gespannt auf Ihre Wünsche.

Dateiliste ausgewählter Titel

Postby Tilman » 2009-05-20 16:11

Hallo Citavi-Team,

Unsere Arbeitsgruppe vermisst eine Möglichkeit eine Dateiliste der (lokal gespeicherten) PDF-Dateien einer ausgewählten Menge von Titel zu erzeugen. Konkret geht es darum die Titelauswahl in der Wissensorganisation per Kategorien zu filtern und die PDFs all dieser Titel in einen Ordner zu kopieren.

Oder geht das etwa schon?

Gruß,
Tilman
Tilman
 

Re: Dateiliste ausgewählter Titel

Postby Peter Meurer » 2009-05-20 19:54

Hallo Tilman,
ganz so elegant ist die folgende Lösung nicht, aber vielleicht doch erstmal ein Weg:
  1. Tabellenansicht aufrufen (Strg+T)
  2. Spalte "Eigener Bestand" einblenden lassen
  3. Gewünschte Titel markieren (oder Auswahl treffen)
  4. Nach Excel exportieren
In der Spalte eigener Bestand sind nun alle verknüpften Dateien eines Titels, z.B.:
"../Links/empf.pdf"; "../Links/Glotz 2001-Inhaltsverzeichnis.pdf"; "../Links/Hapke_In-formation.pdf"; "../Links/Heinisch 2002 - Inmitten der Informationsflut.pdf"; "../Links/Hoffmann 2007.pdf"
Peter Meurer
Citavi Customer Service
 

Re: Dateiliste ausgewählter Titel

Postby Thomas Schempp » 2009-06-16 11:02

Hallo Tilman

Eine Liste aller Titel mit verknüpften Dateien lässt sich auch über die Suche erstellen: In der Wissensorganisation die Suche aufrufen, nach Bedarf "inkl. Unterkategorien" oder "ohne Unterkategorien" wählen und als Suchausdruck "Lokale Datei": * eingeben.

Allerdings gibt es keine eingebaute Möglichkeit, die so gefundenen Dateien in einen Ordner zu kopieren. Citavi enthält aber seit der Version 2.5.1 einen kleinen Makro-Editor, mit dem man eine solche Aufgabe automatisieren könnte. Dazu müsste ich noch wissen, ob die lokal gespeicherten PDF-Dateien im Feld "Lokale Datei" oder unter "Eigener Bestand" verlinkt sind (oder in beiden). Kannst Du mir hier schreiben, ob Ihr Interesse an dem Makro habt und wo die Dateien in Citavi eingetragen sind?

Beste Grüsse, Thomas
Thomas Schempp
Citavi Customer Service
 

Re: Dateiliste ausgewählter Titel

Postby Tilman » 2009-06-16 13:15

Danke Thomas,

das klingt sehr interessant. Gibt es irgendwo eine Dokumentation zu den Makrofunktionen? In welcher Sprache können die Makros geschrieben werden? Sind weitere Bindings (Python,...) geplant? Fragen über Fragen :-)

Zu meinem konkreten Problem: Der Verweis auf die PDF-Datei ist in "Eigener Bestand" als relative Pfadangabe gespeichert. Ja, wir hätten Interesse an so einem Makro.

Gruß,
Tilman
Tilman
 

Re: Dateiliste ausgewählter Titel  Topic is solved

Postby Thomas Schempp » 2009-06-16 16:05

Hallo Tilman

Merci fürs Interesse!
Gibt es irgendwo eine Dokumentation zu den Makrofunktionen? In welcher Sprache können die Makros geschrieben werden? Sind weitere Bindings (Python,...) geplant?

Der Makroeditor ist in der aktuellen Citavi-Version noch experimentell. Das Citavi API ist umfangreich und umfasst den gesamten Leistungsbereich von Citavi. Es ist aber in verschiedener Hinsicht noch nicht auf einem Stand, den wir veröffentlichen wollen (denn nach einer Veröffentlichung darf man ja ein API nur noch erweitern, aber nicht mehr ändern).
Dementsprechend gibt es auch noch keine Dokumentation; ein kleiner Ersatz ist die Intellisense-Funktion im Makroeditor, d.h. die Auflistung der Eigenschaften und Methoden eines Objekts.
Wir haben uns trotzdem entschlossen, den Makroeditor jetzt schon einzubauen, um genau in solchen Fällen wie Deinem "kundenspezifisch" helfen zu können. Wegen des angesprochenen experimentellen Charakters ist der Makroeditor nicht im Menü aufgeführt, sondern nur in der Literaturverwaltung über die Kombination ALT+F11 aufrufbar.

Makros können zurzeit in C# geschrieben werden. Grundsätzlich ist jede Sprache möglich, für die es eine .NET-Implementation gibt (meines Wissens ist das für Python der Fall), aber wir berücksichtigen dies bei der Weitergabe an den Compiler noch nicht.

Nach längerer Vorrede nun zum Makro selbst. Du findest den Code nachfolgend. Um es möglichst allgemein nutzen zu können, kopiert es alle Verknüpfungen (die unter "Eigener Bestand" eingetragen sind) der Titel der aktuellen Auswahl in einen wählbaren Ordner. Ihr müsst also für Eure Situation zuerst eine Auswahl der Titel treffen, die unterhalb einer Kategorie sind. Das geht wie folgt:
  1. In den Programmteil "Literaturverwaltung" wechseln
  2. Suche aufrufen und im Suchfeld eingeben: c: >= x.y.z [x.y.z durch die gewünschte Kategorie ersetzen, z.B. 4.3]
  3. Suche ausführen
  4. "Gefundene Titel als Auswahl übernehmen" anklicken.

Öffne nun mit ALT+F11 den Makroeditor, lösche den dort vorhandenen Code und füge den untenstehenden Code ein. Drücke dann F5 oder klicke auf "Ausführen". Das war's schon :-)

Beste Grüsse,
Thomas

Code: Select all
using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using System.Text.RegularExpressions;

using Asz.Citavi;
using Asz.Citavi.Program;

// Diese Implementation eines Citavi-Makroeditors ist vorläufig und experimentell.
// Das Citavi Objektmodell kann sich in zukünftigen Versionen ändern.

public static class CitaviMacro
{
   public static void Main()
   {
      try
      {
         // Zielordner auswählen
         
         string targetFolder = null;
         
         using (FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog())
         {
            folderBrowserDialog.Description = "Bitte geben Sie den Zielordner an:";
            if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
            {
               targetFolder = folderBrowserDialog.SelectedPath;
            }
         }
         
         // Zielordner-Auswahl wurde abgebrochen -> Makro verlassen.
         if (targetFolder == null) return;
         
         int counter = 0;
         
         // Alle Titel der aktiven Auswahl durchlaufen, alle Bestandeseinträge ("Asset")
         // jedes Titels durchlaufen und in den Zielordner kopieren.
         
         foreach (Reference reference in GuiManager.ActiveProjectSet.References)
         {
            foreach (Asset asset in reference.Assets)
            {
               // Prüfen, ob das Feld "Ablage" ("Filing") Daten enthält und ob es sich dabei
               // um einen Pfad in Anführungszeichen handelt.
               if (!string.IsNullOrEmpty(asset.Filing))
               {   
                  Match match = Asz.CompiledRegex.PathInQuotationMarks.Match(asset.Filing);
                  if (match.Success)
                  {
                     // Relativen in absoluten Pfad umwandeln.
                     string sourceFilePath = GuiManager.ActiveProjectSet.Project.MakeAbsolutePath(match.Groups[1].Value);
                     
                     // Prüfen, ob die Quelldatei existiert.
                     if (File.Exists(sourceFilePath))
                     {
                        string targetFilePath = Path.Combine(targetFolder, Path.GetFileName(sourceFilePath));
                        
                        // Prüfen, ob im Zielordner bereits eine Datei gleichen Namens existiert.
                        // Wenn ja, freien Dateinamen suchen
                        if (File.Exists(targetFilePath))
                        {
                           int i = 2;
                           string testFileName = string.Format("{0} ({1}).{2}", Path.GetFileNameWithoutExtension(sourceFilePath), i, Path.GetExtension(sourceFilePath));
                           
                           while (File.Exists(Path.Combine(targetFolder, testFileName)))
                           {
                              i++;
                              testFileName = string.Format("{0} ({1}).{2}", Path.GetFileNameWithoutExtension(sourceFilePath), i, Path.GetExtension(sourceFilePath));
                           }
                           
                           targetFilePath = Path.Combine(targetFolder, testFileName);
                        }
                        
                        // Datei kopieren
                        File.Copy(sourceFilePath, targetFilePath);
                        
                        counter ++;
                     }
                  }
               }
            }
         }
         
         if (counter == 0)
         {
            MessageBox.Show("Ausführung beendet. Es wurden keine Dateien in den Zielordner kopiert.", "Citavi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
         }
         else   
         {
            MessageBox.Show(string.Format("Ausführung erfolgreich beendet. {0} Dateien wurden in den Zielordner kopiert.", counter), "Citavi", MessageBoxButtons.OK, MessageBoxIcon.Information);
         }
      }
      
      catch (Exception exception)
      {
         MessageBox.Show(exception.ToString(), "Citavi", MessageBoxButtons.OK, MessageBoxIcon.Error);
      }
   }
}
Thomas Schempp
Citavi Customer Service
 

Re: Dateiliste ausgewählter Titel

Postby Tilman » 2009-06-17 07:37

Funktioniert allerbestens. Dankeschön.

Auf die API-Dokumentation bin ich gespannt. Ein Grund mehr ein C# zu lernen...

Gruß,
Tilman
Tilman
 


Return to Wunschliste



cron