2017-02-16 2 views
0

マクロを含む既存のExcelファイルを使用する必要があります。データを書き込む必要があります。マクロをアクティブにし、UWPアプリケーションのExcelファイルから結果を読み込みます。 私はそれのための商用ライブラリを避ける必要があります、必要な結果を得るための最良の方法は何ですか?UWPからExcelに読み書きする

は、実はこれは良い方法かもしれ実装するsyncfusionのようなサードパーティのライブラリを使用して、あなたに

答えて

0

ありがとうございます。私が現在知っている限り、this threadに従ったオープンライブラリは存在しないので、自分でライブラリを書く必要があるライブラリは避けてください。

Excelファイル形式.xlsxは、解凍できるはずの.zipパッケージになります。フォルダ内に多くの.xml形式のファイルがあります。 uwpには、xmlファイルを読み込むためのAPIがあります。したがって、これらのXMLファイルを使って読み書き操作を行うことができます。

uwpアプリケーションでファイルを解凍する方法については、ZipArchiveクラスを使用できるはずです。たとえば、Excelファイルを解凍し、次のように一枚のシートを得ることはことがあります

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; 
} 

あなたはXmlDocument公式のサンプルを参照することができるxmlファイルを読み書きする方法について。たとえば、次のようにコードで一つのノードを読み込む必要があるかもしれません(この方法は、直接シートに値が、値のアドレスを読んでいません):

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; 
    } 

あなたが参照できるthis thread上の完全な読み取りのサンプルがあります。より詳細な機能は、あなた自身で開発してください。

+0

私はすでにWinRTソリューションを試してみましたが、問題は、エクセルファイル内で数式とマクロをトリガーする必要があることです。 – BitFlow

関連する問題