UWPアプリ開発メモ


UWPアプリ開発メモ


UWPアプリを作ろうといろいろと試したときのメモです。


UWPアプリでのClosedXMLの使用

UWPアプリでClosedXMLが使えない。System.Drawingがサポートされていないとか。
UWPアプリでExcelファイルの読み込みをしたいので、.NET Standard LibraryでClosedXMLを使用し、そのLibraryをUWPプロジェクトから参照したら動作しました。Visual Studioからのデバッグ実行でしか確かめていませんが。

以下は、UWPアプリ画面(MainPage.xaml.cs)に実装した内容

MainPage.xaml.cs
var filePicker = new Windows.Storage.Pickers.FileOpenPicker();
filePicker.FileTypeFilter.Add(".xlsx");

StorageFile file = await filePicker.PickSingleFileAsync();
if (file != null)
{
    IBuffer buf = await FileIO.ReadBufferAsync(file);
    byte[] fileBinary = new byte[buf.Length];
    using (DataReader reader = DataReader.FromBuffer(buf))
    {
        reader.ReadBytes(fileBinary);

        using (MemoryStream ms = new MemoryStream(fileBinary))
        {
            List<string[]> lst = SampleExcelAccessor.ReadExcel(ms, );

            //~~ 取得したデータを処理 ~~
        }
    }
}

以下は、.NET Standard Libraryとして実装した内容

SampleExcelAccessor.cs
public class SampleExcelAccessor
{
    public static List<string[]> ReadExcel(Stream fileStream, string sheetName)
    {
        List<string[]> retData = new List<string[]>();

        XLWorkbook workbook = new XLWorkbook(fileStream);

        IXLWorksheet worksheet = workbook.Worksheet(sheetName);
        int lastRow = worksheet.LastRowUsed().RowNumber();
        int lastCol = worksheet.LastColumnUsed().ColumnNumber();

        for (int i = 1; i <= lastRow; i++)
        {
            List<string> rowData = new List<string>();
            for (int j = 1; j <= lastCol; j++)
            {
                IXLCell cell = worksheet.Cell(i, j);
                rowData.Add(cell.Value.ToString());
            }
            retData.Add(rowData.ToArray());
        }

        return retData;
    }
}

UWPアプリ画面のサイズ変更

こんな感じに実装すると画面サイズを設定できます。
下のサンプルは400×300の画面になります。

MainPage.xaml.cs
namespace App1
{
    /// <summary>
    /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();

            ApplicationView.PreferredLaunchViewSize
              = new Size { Height = 300, Width = 400 };
            ApplicationView.PreferredLaunchWindowingMode
              = ApplicationViewWindowingMode.PreferredLaunchViewSize;
        }
    }
}