SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




SharePoint CSV Export mit Timerjob Visual Studio ???

Unbeantwortet Dieser Beitrag hat 6 Antworten

Ohne Rang
302 Beiträge
Ardenda erstellt 7 Nov. 2013 22:21
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

möchte per TimerJob einen Export aus einer Liste in eine CSV machen. Hat mir da jemand ein Code-Beispiel? 

Komme da nicht wirklich weiter mit meiner Abfrage und wie ich die Werte dann in eine CSV hinzufüge. 

 

Hier mal mein Versuch:

 public void ExportItemInSharePoint()

{

SPQuery query = new SPQuery();

            query.Query = "<<Where><Eq><FieldRef Name ='{0}' /><Value Type='{1}'>{2}</Value></Eq </Where>";

 

            if (destinationList.Items.Count > 0)

            {

                //Fetch item from the User List by passing query to the User List

                SPListItemCollection exportItemColl = destinationList.GetItems(query);

 

                if (exportItemColl.Count > 0)

                {

                    //If record found in the list

 

                    for (int icount = 0; icount < exportItemColl.Count; icount++)

                    {

                        SPListItem listItem = exportItemColl[icount];

 

                      //  Und nun weiß ich nicht mehr weiter

                        }

// Hier müsste mein zu erstellende CSV rein

                    }

 }

                }

            }

 

Wäre super wenn mir jemand etwas hätte und sagt wie ich hier weiterbauen muss um einen CSV-Export zu generieren.

 

Vielen Dank im Voraus


Gruß

 

Ardenda

Alle Antworten

Ohne Rang
302 Beiträge
Ardenda Als Antwort am 8 Nov. 2013 00:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

habe es mal aktualisiert:

public void ExportItemInSharePoint()

        {

            string exportFolder = @"C:\exports\";

            string exportFileName = "Export_File.csv";

 

 

 

            SPQuery query = new SPQuery();

            query.Query = "<Where><Eq><FieldRef Name ='{0}' /><Value Type='{1}'>{2}</Value></Eq></Where>";

 

 

                //Fetch item from the User List by passing query to the User List

                SPListItemCollection exportItemColl = destinationList.GetItems(query);

 

                if (exportItemColl.Count > 0)

                {

                    //If record found in the list

                    exportItemColl[0].Delete();

                    using (StreamWriter writer = new StreamWriter(exportFolder + exportFileName))

                    {

                        writer.Write(exportItemColl);

 

                    }

                }

        }

 

Fragen:

 

1. Wie werden überschriften exportiert wenn ich das über CAML Quer mache?

2. Wie definiere ich, welche spalten ich exportiere?

3. Wie splitte ich Werte, dass ich diese dann in eine CSV Semicolon getrennt ist? Beispiel CSV-Datei = Feld1;Feld2;Feld3; etc.

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 8 Nov. 2013 08:40
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich habe Dir im anderen Thread schon geantwortet (offenbar hast Du aus Versehen zwei produziert). Irgendwie sollten wir uns auf einen einigen...

[quote user="Ardenda"]exportItemColl[0].Delete();[/quote]

Das solltest Du nicht machen. Damit wird das Element gelöscht - und noch nichtmal in den Papierkorb!. Falls Du wirklich die Elemente nach dem Export löschen möchtest, dann mache das erst nach dem export.

Welche Spalten exportiert werden sollen, mußt Du selbst wissen. Dasselbe gilt für die Überschriften, die Du selbst als erste Zeile exportieren mußt.
Beispiel:
an die Werte kommst Du über SPLIstItem["Title"]
die Überschrifft z.B. so SPListItem.Fields["Title"].Title

Die Werte schreibst Du dann einfach nacheinander in die Datei. Jeweils mit einem Semikolon dazwischen und einem Environment.NewLine am Zeilenende.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
302 Beiträge
Ardenda Als Antwort am 8 Nov. 2013 09:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Oh das Delete ist noch aus einem anderen Prozess bei mri hängen geblieben.  Glaube der Link hilft mir weiter, den du mir geschickt hattest: http://www.codeproject.com/Articles/415732/Reading-and-Writing-CSV-Files-in-Csharp

Ohne Rang
302 Beiträge
Ardenda Als Antwort am 8 Nov. 2013 09:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Habe mal deinen Satz aufgegriffen:

 

Wo genau klemmt's denn? Einfach nur beim Schreiben in eine Datei? Da könnte das helfen: http://www.codeproject.com/Articles/415732/Reading-and-Writing-CSV-Files-in-Csharp

PS: die beiden Bedingungen (if items.Count > 0) kannst Du Dir komplett sparen, weil Du sowieso hinterher per Schleife die Elemente durchgehst. Wenn es keine gibt, wir d einfach die Schleife nie durchlaufen. Insbesondere mit SPList.Items muß man sehr vorsichtig sein. Das holt bei jedem Zugriff alle Elemente der Liste aus der Datenbank.

Frage

Wenn ich nicht per SPListITems zugreifen soll, wie kann ich dann die CAML Query verwenden und dann einfach alles was da drin ist auf einmal exporitieren ? Die Datei muss am Ende in irgendeinem C-Laufwerk hinterlegt werden.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 8 Nov. 2013 09:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Ardenda"]Wenn ich nicht per SPListITems zugreifen soll, wie kann ich dann die CAML Query verwenden [/quote]

Ich habe da nur auf einen Widerspruch in Deinem Code hingewiesen. Du prüfst zuerst, ob es überhaupt Elemente in der Liste gibt (SPList.Items.Count > 0) und machst dann eine CAML-Query (bei der Du unötigerweise nochmal prüfst, ob sie etwas liefert).

Baue einfach Deine SPQuery zusammen und wende sie auf die Liste an (SPList.GetItems(SPQuery) ). Gehe dann die gelieferten Elemente mit foreach durch und schreibe sie in die Datei.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
302 Beiträge
Ardenda Als Antwort am 11 Nov. 2013 15:31
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi Andi,

danke für die Hilfe. Kannst du mir noch sagen wie ich sagen kann welche Spalten in einer Zeile exportiert werden? Aktuell klatscht es alles untereinander.

Hier mein Code:

      public void ExporItemFromSharePoint(string exportCAML)
        {
            // Filepath
                string exportFolder = @"C:\exports\";
                string exportFileName = "Export_File.csv";

            //Query from "CAML" field in Configlist
                SPQuery exportquery = new SPQuery();
                exportquery.Query = string.Format("" + exportCAML + "");
            //Get SPFieldname from CSV Mapping File
 //Fetch item from the User List by passing query to the User List
                SPListItemCollection exportItemColl = destinationList.GetItems(exportquery);
                using (StreamWriter writer = new StreamWriter(exportFolder + exportFileName))
          
            // Write each line from Query in CSV
                if (exportItemColl.Count > 0)
                {
                    //If record found in the list

                    for (int icount = 0; icount < exportItemColl.Count; icount++)
                    {
                        SPListItem listItem = exportItemColl[icount];
                           
                            writer.WriteLine(SPEncode.HtmlEncode(listItem["Path"].ToString()) + ";");
                    }
                   
                }
        }

Ich möchte ungern sowas hier machen:

writer.WriteLine(

 

SPEncode.HtmlEncode(listItem["Feld1"].ToString()) + ";" + SPEncode.HtmlEncode(listItem["Feld2"].ToString()) + SPEncode.HtmlEncode(listItem["Feld3"].ToString()));

Habe mir mal eine TXT Datei erstellt die wow folgt aussieht:

SPSpalte1,

SPSpalte2,