Citavi-Kategorien mittels Excel-Import-Makro (CIM007) verändern

Paul S. hinzugefügt 4 Monaten her
beantwortet

Liebes Citavi-Team,


wie schon in einem älteren Beitrag erwähnt, bin ich ein sehr großer Fan des Citavi-Makros CIM007. Es erlaubt mir Informationen von Referenzen (in Textform/als Excel-Datei) außerhalb Citavis zu verarbeiten und dann wieder einzuspeisen.

(Fiktives Beispiel: Ich exportiere die Tabellenansicht eines Citavi-Projekts als Excel-Datei, führe irgendeine Formatierung aller Abstracts durch und speichere das Ergebnis in eine neue Spalte der Excel-Datei. Dann nutze ich das CIM007-Makro um die formatierten Abstracts in das Citavi-Projekt zu importieren und die alten zu ersetzen.)

Die Möglichkeiten, die durch dieses Makro entstehen sind sehr groß, da der Excel-Zwischenschritt im Endeffekt eine Schnittstelle zu Software wie auch R herstellt.

Nun also meine Frage:

Ein Import von Text in "einfache" Citavi-Felder wie eben Abstract, die Freitextfelder, usw. funktioniert wunderbar über ReferencePropertyId.Abstract, ReferencePropertyId.CustomField1 usw. und die parentReference.SetValue Funktion wie unten gezeigt.

Ein Import in die Citavi-Kategorien ist aber anscheinend nicht ohne weiteres möglich. Zwar kann ich ja problemlos über die Tabellenansicht eine Kategorien-Spalte exportieren, welche dann je Referenz eben Einträge wie "1 Kategorie_A" oder "1 Kategorie_A; 2 Kategorie_B" enthält, der re-import dieser Spalte gelingt mir aber aktuell nicht.

Mir ist schon klar, dass das Kategoriensystem bzw. die Wissenselemente in Citavi anders/komplexer gehandhabt werden als die "einfachen" Textfelder und, dass deshalb der derzeitige Ansatz

parentReference.SetValue(targetField[j], stringtargetField[j]);
mit gutem Grund nicht funktioniert. Ich frage mich aber ob ich die Funktion nicht durch eine Anpassung doch so umschreiben könnte, dass die Values für das Feld Category eben so geändert werden, dass Citavi es versteht.

Kommentare (1)

Foto
2

Lieber Paul,

das Problem hier ist, dass die Categories-Eigenschaft eines Titels) selbst eine Aufzählung ist. Sie müssten also zunächst den Feldinhalt anhand des Trennzeichens z.B. mit string.Split() aufteilen.

Dann wird es schwierig, weil Ihnen die Hierarchie-Information im Prinzip fehlt. Wenn das Kategoriensystem bereits vollständig vorliegt, können Sie im Prinzip aus mit einer LINQ-Abfrage dann für jedes Element des Arrays die entsprechende Kategorie aus project.AllCategories extrahieren und dem Titel zuweisen.

Hilft das weiter?

Viele Grüße

Sebastian

Foto
1

Ja, danke, das ist schon mal ein Anfang! Es sollte eigentlich immer einzurichten sein, dass das Kategoriensystem bereits vollständig vorliegt.

Und zum Verständnis: Gibt es nur eine einzige Kategorie im Projekt, so ist die Categories-Eigenschaft eines Titels dann doch ausnahmsweise nur ein einziger string?

Foto
2

Hallo, Paul

Die Categories-Eigenschaft des Titels ist kein String, sondern eine ReferenceCategoriesCollection. Wenn es nur eine einzige Kategorie im Projekt gibt, hat diese Collection nur einen Eintrag.

Der Name der Kategorie ist über die Eigenschaft Name abrufbar.

Viele Grüße

Sebastian

Foto
1

Hallo Sebastian, danke für die Hilfe. Habe mich etwas eingefuchst und es zumindest mal zum Laufen bekommen. Hier der Teil des Codes, der für jede Referenz bei einem String wie z.B. "Kat1; Kat2" dafür sorgt, dass die Referenz im Citavi-Projekt den Kategorien "Kat1" und "Kat2" zugewiesen wird. Dafür muss sichergestellt sein, dass es diese Kategorien im Kategoriensystem des Citavi-Projekts schon gibt:

https://gist.github.com/SchmidtPaul/9b381ad91d6b6466c8340c497fee7538

Im wahren Leben sollte der String "Kat1; Kat2" natürlich ersetzt werden. Ich beziehe ihn wie oben beschrieben je Referenz aus einer Excel-Tabelle mithilfe des CIM007 Makros.

Foto
1

Hallo, Paul,

das sieht gut aus. :-)

Viele Grüße

Sebastian

Foto
Antwort schreiben
 
Dateianlage anfügen (KEINE vertraulichen Dokumente!)