2017-02-16 2 views
0

Ich brauche eine vorhandene Excel-Datei zu verwenden, die Makros enthalten, ich brauche einige Daten zu schreiben, aktivieren einige Makros dann das Ergebnis aus der Excel-Datei von meiner UWP Anwendung lesen. Ich muss jede kommerzielle Bibliothek dafür vermeiden, was ist der beste Weg, um das gewünschte Ergebnis zu erhalten?Lesen und Schreiben auf Excel aus UWP

Danke

Antwort

0

Eigentlich eine dritte Partei Bibliothek wie syncfusion mit diesem implementieren kann ein guter Weg sein. Da Sie jede Bibliothek vermeiden, die Sie möglicherweise eine Bibliothek selbst schreiben müssen, gibt es, soweit ich weiß, derzeit keine offene Bibliothek gemäß this thread.

Das Excel-Dateiformat .xlsx könnte ein .zip Paket sein, das Sie in der Lage sein sollten, es zu dekomprimieren, und Sie werden viele .xml Format-Dateien im Ordner finden. In uwp haben wir APIs zum Lesen der XML-Dateien. Mit diesen XML-Dateien können Sie also lesen und schreiben.

Für wie eine Datei in UWP App Dekompressionssituation sollten Sie nutzen können ZipArchive Klasse sein. Zum Beispiel einer Excel-Datei Dekomprimierung und ein Blatt bekommen kann wie folgt sein:

private async void btnopenfile_Click(object sender, RoutedEventArgs e) 
{ 
    FileOpenPicker opener = new FileOpenPicker(); 
    opener.ViewMode = PickerViewMode.Thumbnail; 
    opener.FileTypeFilter.Add(".xlsx"); 
    opener.FileTypeFilter.Add(".xlsm"); 
    StorageFile file = await opener.PickSingleFileAsync(); 
    if (file != null) 
    {    
     using (var fileStream = await file.OpenReadAsync()) 
     { 
      using (ZipArchive archive = new ZipArchive(fileStream.AsStream(), ZipArchiveMode.Read)) 
      { 
       worksheet = this.GetSheet(archive, "sheet1"); 
      } 
     } 
    } 
} 

private XmlDocument GetSheet(ZipArchive archive, string sheetName) 
{ 
    XmlDocument sheet = new XmlDocument(); 
    ZipArchiveEntry archiveEntry = archive.GetEntry("xl/worksheets/" + sheetName + ".xml"); 

    using (var archiveEntryStream = archiveEntry.Open()) 
    { 
     using (StreamReader reader = new StreamReader(archiveEntryStream)) 
     { 
      string xml = reader.ReadToEnd(); 

      txtresult.Text = xml; 
      sheet.LoadXml(xml); 
     } 
    } 

    return sheet; 
} 

Für wie XML-Dateien lesen und schreiben Sie die XmlDocument amtliche Probe verweisen können. Zum Beispiel können Sie einen Knoten von Code lesen müssen wie folgt (Diese Methode nicht direkt auf den Wert in dem Blatt gelesen wird, aber der Wert-Adresse):

private string ReadCell(XmlDocument worksheet, string cellAddress) 
    { 
     string value = string.Empty; 
     XmlElement row = worksheet.SelectSingleNodeNS("//x:c[@r='" + cellAddress + "']", "xmlns:x=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"") as XmlElement; 
     if (row != null) 
     { 
      value = row.InnerText; 
     } 
     return value; 
    } 

Es gibt eine komplette Leseprobe auf this thread Sie verweisen können. Mehr Detailmerkmale entwickeln Sie bitte selbst.

+0

Vielen Dank für Ihren Vorschlag, ich habe bereits versucht, die WinRT Lösung, aber das Problem ist, dass ich brauche die Formeln und Makros in der Excel-Datei, Lesen oder Schreiben von XML in der zip etwas auslösen wird nicht auslösen ... – BitFlow

Verwandte Themen