マクロを含む既存のExcelファイルを使用する必要があります。データを書き込む必要があります。マクロをアクティブにし、UWPアプリケーションのExcelファイルから結果を読み込みます。 私はそれのための商用ライブラリを避ける必要があります、必要な結果を得るための最良の方法は何ですか?UWPからExcelに読み書きする
は、実はこれは良い方法かもしれ実装するsyncfusionのようなサードパーティのライブラリを使用して、あなたに
マクロを含む既存のExcelファイルを使用する必要があります。データを書き込む必要があります。マクロをアクティブにし、UWPアプリケーションのExcelファイルから結果を読み込みます。 私はそれのための商用ライブラリを避ける必要があります、必要な結果を得るための最良の方法は何ですか?UWPからExcelに読み書きする
は、実はこれは良い方法かもしれ実装するsyncfusionのようなサードパーティのライブラリを使用して、あなたに
ありがとうございます。私が現在知っている限り、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上の完全な読み取りのサンプルがあります。より詳細な機能は、あなた自身で開発してください。
私はすでにWinRTソリューションを試してみましたが、問題は、エクセルファイル内で数式とマクロをトリガーする必要があることです。 – BitFlow