Exportieren und Importieren aus MS Project

Die dhtmlxGantt-Bibliothek ermöglicht es Ihnen, nahtlos mit Daten aus dem Gantt-Diagramm und MS Project zu arbeiten. Sie können Daten aus dem Gantt-Diagramm nach MS Project exportieren und auch Daten aus MS Project in das Gantt-Diagramm importieren.

Der Service ist kostenlos, aber die resultierende Datei wird ein Wasserzeichen unter der GPL-Lizenz enthalten. Wenn Sie eine gültige Lizenz haben, wird der Export während des Supportzeitraums (12 Monate für alle PRO-Lizenzen) wasserzeichenfrei sein.

Es gibt mehrere Exportdienste, die Sie verwenden können. Sie können sie auf Ihrem Computer installieren, um das Gantt-Diagramm lokal nach MS Project zu exportieren. Beachten Sie, dass diese Exportdienste nicht Teil des Gantt-Pakets sind. Weitere Details zur Nutzung finden Sie im relevanten Artikel.

Einschränkungen des Online-Exportdienstes

Der Exportdienst hat einige Einschränkungen hinsichtlich Zeit und Anfragengröße.

Zeitlimits

Wenn der Export mehr als 20 Sekunden dauert, wird der Prozess gestoppt und Sie sehen den folgenden Fehler:

Error: Timeout trigger 20 seconds

Wenn mehrere Benutzer gleichzeitig exportieren, kann der Prozess verlangsamt werden. Die für jede Exportanfrage eines Benutzers aufgewendete Zeit wird jedoch separat gezählt.

Anfragengrößenlimits

Der gemeinsame API-Endpunkt https://export.dhtmlx.com/gantt wird für alle Exportmethoden (exportToPDF, exportToPNG, exportToMSProject, etc.) verwendet, mit einer maximalen Anfragengröße von 10 MB.

Für MS Project-spezifische Exporte/Importe gibt es einen dedizierten Endpunkt https://export.dhtmlx.com/gantt/project. Dieser Endpunkt unterstützt Dateigrößen bis zu 40 MB und funktioniert auch für Primavera P6 Dienste.

Verwendung von Exportmodulen

Wenn Ihr Diagramm groß ist, können Sie ein eigenständiges Exportmodul verwenden. Das Modul ist kostenlos, wenn Sie eine Commercial, Enterprise oder Ultimate Lizenz haben. Sie können das Modul auch separat erwerben.

Weitere Informationen zur Verwendung des Exportmoduls mit MS Project finden Sie in diesem Leitfaden.

Export nach MS Project

Die Gantt-Komponente unterstützt den Export von Aufgaben, Verknüpfungen und Ressourcen nach MS Project.

Um Daten aus dem Gantt-Diagramm nach MS Project zu exportieren:

  • Aktivieren Sie das export_api Plugin mit der Methode gantt.plugins:
gantt.plugins({
    export_api: true
});

Für Gantt-Versionen älter als 8.0, fügen Sie https://export.dhtmlx.com/gantt/api.js in Ihre Seite ein, um den Online-Exportdienst zu aktivieren:

<script src="codebase/dhtmlxgantt.js"></script>
<script src="https://export.dhtmlx.com/gantt/api.js"></script>

  • Verwenden Sie die Methode gantt.exportToMSProject, um die Daten zu exportieren.
gantt.exportToMSProject();

Diese Methode sendet eine Anfrage an den Remote-Dienst, der entweder eine XML-Projektdatei oder eine URL zum Herunterladen der generierten Datei bereitstellt.

Related sample:  Export data : MS Project, PrimaveraP6, Excel & iCal

Antwort

Die Antwort ist ein JSON-Objekt mit folgender Struktur:

{
   data: {},
   config: {},
   resources: [],
   worktimes: []
}
  • data: Ein Gantt Datenobjekt, das Aufgaben mit Eigenschaften wie id, open, parent, progress, start_date, text, resource enthält. Daten sind als Zeichenfolgen im Format "%Y-%m-%d %H:%i" formatiert.
  • config: Ein Gantt Konfigurationsobjekt mit Einstellungen, die aus der Projektdatei abgerufen wurden.
  • resources: Ein Array von Objekten, die Ressourcen aus der Projektdatei darstellen, jeweils mit Eigenschaften wie id, name und type.
  • worktimes: Ein Array von Objekten zur Erstellung eines neuen Kalenders. Jedes Kalenderkonfigurationsobjekt kann enthalten:
    • id: Optional, die Kalender-ID
    • hours: Ein Array, das die globalen Arbeitszeiten definiert
    • dates: Ein Array von Daten, das enthalten kann:
      • Wochentage (0 für Sonntag bis 6 für Samstag), wobei 1/wahr einen Arbeitstag bedeutet und 0/falsch einen freien Tag.
      • Spezifische Datensätze.

Exporteinstellungen

Die Methode exportToMSProject() akzeptiert ein optionales Objekt mit verschiedenen Eigenschaften:

  • name: (string) Legt den Namen der exportierten Datei fest, Standard ist 'gantt.xml'.
gantt.exportToMSProject({
    name: 'custom.xml'
});
  • auto_scheduling: (boolean) Bestimmt den Planungsmodus für Aufgaben. true bedeutet automatisch geplant, false bedeutet manuell geplant (Standard).
gantt.exportToMSProject({
    auto_scheduling: false
});
  • skip_circular_links: (boolean) Entfernt zirkuläre Verknüpfungen, wenn auf true gesetzt (Standard). Wenn false, werden zirkuläre Verknüpfungen beibehalten.
gantt.exportToMSProject({
    skip_circular_links: false
});
  • project: (object) Ermöglicht das Setzen benutzerdefinierter Eigenschaften für das exportierte Projekt.
gantt.exportToMSProject({
    project: {
        'Author': 'I am!',
        'MinutesPerDay': function () {
            return gantt.config.hours_per_day * 60;
        }
    }
});

Unterstützte Projekteigenschaften sind hier aufgelistet.

  • tasks: (object) Ermöglicht das Setzen benutzerdefinierter Eigenschaften für exportierte Aufgaben.
gantt.exportToMSProject({
   tasks: {
       'StartVariance': function (task) {
           return task.startVariance || 0;
       },
       'PercentWorkComplete': function (task) {
           return task.progress + 0.1;
       },
       'Custom': () => 'Custom value',
       'Custom 2': 'My Custom value'
   }
});

Unterstützte Aufgabeneigenschaften sind hier aufgelistet.

  • data: (object) Ermöglicht das Setzen einer benutzerdefinierten Datenquelle für den Export.

Das start_date und end_date sollten sowohl Datum als auch Uhrzeit im Format %d-%m-%Y %H:%i enthalten.

const customData = {
    "data": [
        { "id": "10", "text": "Project #5", "start_date": "01-04-2025 00:00", 
            "duration": 3, "order": 10, "progress": 0.4, "open": true, 
            "end_date": "04-04-2025 00:00", "parent": 0 
        },
        { "id": "1", "text": "Task #67", "start_date": "02-04-2025 00:00", 
            "duration": 2, "order": 10, "progress": 0.6, "parent": "10", 
            "end_date": "04-04-2025 00:00" 
        },
        { "id": "2", "text": "Task #89", "start_date": "01-04-2025 00:00", 
            "duration": 2, "order": 20, "progress": 0.6, "parent": "10", 
            "end_date": "03-04-2025 00:00" 
        },
    ],
    "links": [
        { "id": 1, "source": 1, "target": 2, "type": "1" },
    ]
};
 
gantt.exportToMSProject({
    data: customData
});

Related sample:  Gantt. Export custom data

  • callback: (function) Verwenden Sie dies, um eine Download-URL für die generierte XML zu erhalten. Der Callback erhält ein JSON-Objekt mit einer url-Eigenschaft.
gantt.exportToMSProject({
    callback: function(res){
        alert(res.url);
    }
});
  • resources: (array) Exportiert eine Liste von Ressourcen in die MS Project-Datei.
gantt.exportToMSProject({
  resources: [
    {"id":"1","name":"John","type":"work"},
    {"id":"2","name":"Mike","type":"work"},
    {"id":"3","name":"Anna","type":"work"}
  ]
});

Ressourcentypen können "work", "cost" oder "material" sein. Weisen Sie Ressourcen mit der ResourceAssignments-Eigenschaft der Aufgaben-Konfiguration zu:

var users = [
  {key:'0', label: "N/A"},
  {key:'1', label: "John"},
  {key:'2', label: "Mike"},
  {key:'3', label: "Anna"}
];
 
gantt.exportToMSProject({
  resources: users
     .filter(u => u.key !== '0')
     .map(u => ({
           id: u.key,
           name: u.label,
           type: "work"
     })),
  tasks: {
     ResourceAssignments: (task) => task.user
  }
});

Die ResourceAssignments-Eigenschaft kann eine Zeichenfolge/Zahl oder ein Array solcher Werte zurückgeben:

tasks: {
    ResourceAssignments: (task) => [task.user, task.office]
}
  • server: (string) Gibt den API-Endpunkt für die Anfrage an. Verwenden Sie dies für lokale Installationen des Exportdienstes. Standard ist https://export.dhtmlx.com/gantt.
gantt.exportToMSProject({
   server: "https://myapp.com/myexport/gantt"
});

Import aus MS Project

Um eine XML- oder MPP-MS Project-Datei zu konvertieren, senden Sie eine Anfrage an den Exportdienst:

  • Anforderungs-URL: https://export.dhtmlx.com/gantt
  • Anforderungsmethode: POST
  • Content-Type: multipart/form-data

Parameter:

  • file: Die MPP- oder XML-MS Project-Datei.
  • type: "msproject-parse".
  • data: (optional) Ein JSON-String mit Einstellungen.

Beispiel:

<form action="https://export.dhtmlx.com/gantt" method="POST" 
    enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="hidden" name="type" value="msproject-parse">
    <button type="submit">Get</button>
</form>

Alternativ können Sie die clientseitige API verwenden:

gantt.importFromMSProject({
    data: file,
    taskProperties: ["Notes", "Name"],
    callback: function (project) {
        if (project) {
            gantt.clearAll();
            if (project.config.duration_unit) {
                gantt.config.duration_unit = project.config.duration_unit;
            }                    
            gantt.parse(project.data);
        }
     }
});

Related sample:  Import MS Project file

Hierbei ist file eine File-Instanz, die eine XML- oder MPP-Projektdatei enthält.

gantt.importFromMSProject erfordert Unterstützung für die HTML5 File API.

Antwort

Die Antwort ist als JSON-Objekt mit folgendem Format strukturiert:

{
   data: {},
   config: {},
   resources: [],
   worktime: {}
}
  • data: Dies enthält ein Gantt Datenobjekt. Jede Aufgabe enthält Eigenschaften wie id, open, parent, progress, start_date, text und resource. Daten sind als Zeichenfolgen im Format "%Y-%m-%d %H:%i" formatiert.
  • config: Dies ist ein Gantt Konfigurationsobjekt, das Einstellungen aus der Projektdatei enthält.
  • resources: Es ist ein Array von Objekten, die jeweils Eigenschaften wie id, name und type aufweisen und die in der Projektdatei aufgeführten Ressourcen darstellen.
  • worktime: Dieses Objekt enthält die Arbeitszeiteinstellungen aus dem Projektkalender.

Importeinstellungen

Festlegen der Dauereinheit

Um die gewünschte Dauereinheit anzugeben, können Sie den durationUnit-String (z.B. "minute", "hour", "day", "week", "month", "year") an den Server senden. So geht's:

<form action="https://export.dhtmlx.com/gantt" method="POST" 
    enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="hidden" name="type" value="msproject-parse">
    <input type="hidden" name="data" 
        value="{ \"durationUnit\": \"hour\" }" />
    <button type="submit">Get</button>
</form>

Alternativ können Sie den folgenden JavaScript-Code verwenden:

gantt.importFromMSProject({
    data: file,
    durationUnit: "hour",
    callback: function(project){}
});

Abrufen von Projekteigenschaften

Falls bestimmte Projektfelder benötigt werden, können Sie das projectProperties-Eingabefeld mit einem Array der erforderlichen Felder in die Serveranfrage aufnehmen. Dies extrahiert bestimmte Eigenschaften der Project-Entität in die config-Eigenschaft der Antwort. Unterstützte Eigenschaften sind hier aufgelistet.

Zum Beispiel:

<form action="https://export.dhtmlx.com/gantt" method="POST" 
    enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="hidden" name="type" value="msproject-parse">
    <input type="hidden" name="data" 
        value="{ \"projectProperties\": [\"Author\", \"Title\"] }" />
    <button type="submit">Get</button>
</form>

Oder verwenden Sie JavaScript:

gantt.importFromMSProject({
    data: file,
    durationUnit: "hour",
    projectProperties: ["Author", "Title"],
    callback: function(project){
        var config = project.config;
        alert(config.$custom_properties.Author);
    }
});

Abrufen von Aufgabeneigenschaften

Um aufgabenspezifische Felder abzurufen, fügen Sie taskProperties in die Serveranfrage mit einem Array der gewünschten Felder ein. Dies extrahiert bestimmte Eigenschaften der Task-Entitäten. Unterstützte Eigenschaften sind hier aufgelistet.

Beispiel mit HTML:

<form action="https://export.dhtmlx.com/gantt" method="POST" 
    enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="hidden" name="type" value="msproject-parse">
    <input type="hidden" name="data" 
        value="{ \"taskProperties\": [\"Contact\", \"Priority\"] }" />
    <button type="submit">Get</button>
</form>

Oder mit JavaScript:

gantt.importFromMSProject({
    data: file,
    durationUnit: "hour",
    taskProperties: ["Contact", "Priority"],
    callback: function(project){
        var config = project.config;
        alert(config.$custom_properties.Author);
        gantt.parse(project.data);
    }
});
gantt.attachEvent("onTaskLoading", function(task) {
    if (task.$custom_data) {
        task.contact = task.$custom_data["Contact"];
        task.priority = task.$custom_data["priority"];
        delete task.$custom_data;
    }
    return true;
});

Identifizierung von Aufgabentypen

Um Aufgabentypen zu bestimmen, werden Aufgaben mit dem Project-Typ Summary: "1" haben, und Aufgaben mit dem Milestone-Typ Milestone: "1". Das folgende Beispiel zeigt, wie man Daten mit diesen Eigenschaften importiert und die Aufgabentypen entsprechend festlegt:

gantt.importFromMSProject({
        data: file,
        taskProperties: [
            "Summary",
            "Milestone",
        ],
        callback: function (project) {
            if (project) {
                console.log(project)
                gantt.clearAll();
                if (project.config.duration_unit) {
                    gantt.config.duration_unit = project.config.duration_unit;
                }
                console.log('import: ', project.data);
                gantt.parse(project.data);
            }
        }
    });

Sie können dann die Aufgabentypen basierend auf den importierten Eigenschaften anpassen:

gantt.attachEvent("onTaskLoading", function (task) {
    if (task.$custom_data) {
        if (task.$custom_data.Summary == "1") {
            task.type = "project";
        }
        if (task.$custom_data.Milestone == "1") {
            task.type = "milestone";
        }
        // delete task.$custom_data;
    }
    return true;
});

Related sample:  Gantt. Import MSP files. Get task type from properties

Anfragengrößenlimits und Umgang mit großen Dateien

Es gibt zwei API-Endpunkte für MS Project Export-/Importdienste:

  • https://export.dhtmlx.com/gantt: Der Standardendpunkt für alle Exportmethoden (exportToPDF, exportToPNG, exportToMSProject, etc.). Maximale Anfragengröße: 10 MB.
  • https://export.dhtmlx.com/gantt/project: Speziell für MSProject und Primavera P6 Export-/Importdienste. Maximale Anfragengröße: 40 MB.

Geben Sie den Endpunkt mit der server-Eigenschaft in der Exportkonfiguration an:

gantt.importFromMSProject({
    server:"https://export.dhtmlx.com/gantt",
    data: file,
    callback: function(project){
       // some logic
    }
});

Standardmäßig ist der Endpunkt https://export.dhtmlx.com/gantt. Für größere Dateien, die 4 MB überschreiten, verwenden Sie den zweiten Endpunkt:

gantt.importFromMSProject({
    server:"https://export.dhtmlx.com/gantt/project",
    data: file,
    callback: function(project){
       // some logic
    }
});

Dieser Endpunkt unterstützt Anfragen bis zu 40 MB und ist auf MS Project Importe/Exporte beschränkt. Andere Methoden, wie gantt.exportToPDF({server:"https://export.dhtmlx.com/gantt/project"}), führen zu einem Serverfehler.

Unterschiede in den Zeitberechnungen

Die Zeitberechnungen in dhtmlxGantt und MS Project unterscheiden sich aufgrund ihrer jeweiligen Ansätze. Diese Unterschiede können zu unterschiedlichen Ergebnissen führen. Sie können die Gantt-Einstellungen anpassen, um die Ergebnisse enger abzustimmen:

  1. Dauerumrechnungen: Geben Sie HoursPerDay und MinutesPerDay beim Export nach MS Project an, um Diskrepanzen zu handhaben:
gantt.exportToMSProject({
    project: {
        HoursPerDay: function () {
            return 24;
        },
        MinutesPerDay: function () {
            return 24 * 60;
        }
    }
});

Related sample:  Export to MSProject without the "work_time" settings

  1. Arbeitszeiteinstellungen: Wenn die Arbeitszeit in Gantt deaktiviert ist, wird der Standardkalender (8-Stunden-Arbeitstage, Mo-Fr-Arbeitswoche) dennoch an MS Project gesendet. Um Diskrepanzen zu vermeiden, löschen Sie den Standardkalender:
gantt.setWorkTime({day:0, hours:[0,24]});
gantt.setWorkTime({day:1, hours:[0,24]});
gantt.setWorkTime({day:2, hours:[0,24]});
gantt.setWorkTime({day:3, hours:[0,24]});
gantt.setWorkTime({day:4, hours:[0,24]});
gantt.setWorkTime({day:5, hours:[0,24]});
gantt.setWorkTime({day:6, hours:[0,24]});
  1. Zusammenfassende Elementdaten: Wenn gantt.config.duration_unit auf "day" gesetzt ist, werden Dauern auf ganze Tage gerundet. MS Project behält jedoch Bruchdauern bei. Der Wechsel zu "hour"-Einheiten kann helfen:
gantt.config.duration_unit = "hour";

Related sample:  Export to MSProject without the "work_time" settings

Zurück nach oben