Shared String Table パーツ(sharedStrings.xml)について

12.3.15 Shared String Table Part[p.98]

workbookのすべてのworksheetに出現する文字列が定義されているパーツ。 worksheetのセルは、後述する要素のコレクションのインデックスを使用して文字列をUIに表示する。

18.4.9 sst(Shared String Table)[p.1734], CT_Sst[p.3918]

Shared String Tableパーツのルート要素で、各文字列アイテム(String Items:si)のコレクションを提供する。

属性名 説明 要否
count workbookに出現する文字列の個数 unsignedInt 任意
uniqueCount siの個数 unsignedInt 任意
18.4.8 si(String Item)[p.1734], CT_Rst[p.3919]

sst要素の子要素で、Shared String tableの1つの文字列が定義されている要素 セルに表示される文字列はsi要素の子要素のt要素

18.4.4 r(Rich Text Run)[p.1732], CT_RElt[p.3919]

リッチテキストのrunが定義されている要素。書式設定のように、文字列が共有しているプロパティが設定される。 プロパティの値はrPr要素、表示する文字列はt要素に定義されている。

18.4.6 rPh(Phonetic Run)[p.1733], CT_PhoneticRun[p.3919]

si要素の子要素で、si要素のフリガナの文字列が子要素のt要素に定義されている。

属性名 説明 要否
eb(Base Text End Index) 0ベースのフリガナの終了位置のオフセット unsignedInt 必須
sb(Base Text Start Index) 0ベースのフリガナの開始位置のオフセット unsignedInt 必須
18.4.3 phoneticPr(Phonetic Properties)[p.1731], CT_PhoneticPr[p.3920]

フリガナの表示方法のプロパティが定義されている。

属性名 説明 要否
alignment セルの上部に表示するフリガナの配置を定義する。 ST_PhoneticAlignment 任意
fontId styleパーツのfontコレクションのゼロベースのインデックス unsignedInt 必須
type セルの上部に表示するフリガナの文字タイプを定義する。 ST_PhoneticType 任意
18.18.56 ST_PhoneticAlignment(Phonetic Alignment Types)[p.2485]

フリガナの配置を定義(string)

Enumeration Value 説明
center(Center Alignment) 中央揃え
distributed(Distributed) 均等割り付け
lift(Left Alignment) 各単語毎に、左揃え
noControl(No Control) 単純な左揃え
18.18.57 ST_PhoneticType(Phonetic Type)[p.2486]

フリガナの文字タイプ(string)

Enumeration Value 説明
fullwidthKatakana 全角カナ
halfwidthKatakana 半角カナ
Hiragana ひらがな
noConversion 入力されたままの値

ASP.NET MVC ファイルダウンロード

ファイルダウンロード内容
  1. Views/Upload/Download.cshtmlでダウンロードボタンをクリック
  2. セッションにあるファイルをダウンロードする
作成物
  1. Views/Upload/Download.cshtmlを修正してダウンロードボタンを追加
  2. Controllers/DownloadsController.csを作成してセッションのストリームからファイルを戻す

コード

Views/Upload/Download.cshtml(修正)

@*
    For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
}

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>ダウンロード</title>
</head>
<body>
    <div class="text-center">
        @* 追加 開始*@
        @using (Html.BeginForm("DownloadFile", "Downloads", FormMethod.Post))
        {
            <button type="submit">ダウンロード</button>
        }
        @* 追加 終了*@
    </div>
</body>
</html>
Controllers/Downloadscontroller.cs(新規)

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;

namespace FileUploadDownload.Controllers
{
    public class DownloadsController : Controller
    {
        public IActionResult DownloadFile()
        {
            string contentType = "spplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            string fileName = HttpContext.Session.GetString("fileName");
            var stream = HttpContext.Session.Get("uploadedStream");
            HttpContext.Session.Clear();
            return File(stream, contentType, fileName);
        }
    }
}

ASP.NET MVC ファイルアップロード

ファイルアップロード内容
  1. Views/Move/Upload.cshtmlでファイルを選択する
  2. アップロードボタンをクリックするとダウンロード画面へ遷移する
作成物
  1. Views/Move/Upload.cshtmlを修正して、アップロード用のフォームを作成
  2. Controllers/UploadControllers.csを作成して、フォームからファイルを受け取ってセッションに格納
  3. Views/Upload/Download.cshtmlを作成して、画面遷移する

コード

Views/Move/Upload.cshtml(修正)

@*
    For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
}

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>upload</title>
</head>
<body>
    @* 追加 開始*@
    @using (Html.BeginForm("Download","Upload", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        <input type="file" name="uploadedFile" />
        <input type="submit" value="アップロード" />
    }
    @* 追加 終了*@
</body>
</html>
Controllers/UploadControllers.cs(新規)

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;
using System.IO;

namespace FileUploadDownload.Controllers
{
    public class UploadController : Controller
    {
        public IActionResult Download(IFormFile uploadedFile)
        {
            if (uploadedFile == null) return View();

            string fileName = uploadedFile.FileName;
            using (var uploadedStream = uploadedFile.OpenReadStream())
            using (var sessionStream = new MemoryStream())
            {
                uploadedStream.CopyTo(sessionStream);
                HttpContext.Session.SetString("fileName", fileName);
                HttpContext.Session.Set("uploadedStream", sessionStream.ToArray());
            }
            return View();
        }
    }
}
Views/Upload/Download.cshtml(新規)

@*
    For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
}

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>ダウンロード</title>
</head>
<body>
    hello
</body>
</html>

ASP.NET MVC セッションを有効にする

作成物
  1. Startup.csを編集

修正内容

Startup.cs ConfigureServices

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
    // 追加 開始
    services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromMinutes(15);
    });
    // 追加 終了
}
Startup.cs Configure

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // ...
    app.UseStaticFiles();

    // 追加 開始
    app.UseSession();
    // 追加 終了

    app.UseRouting();
    // ...
}

ASP.NET MVC 画面遷移

画面遷移内容
  1. Home/Index.cshtmlにアップロード画面へのリンク
  2. リンクをクリックするとアップロード画面に遷移する
  3. 画面遷移はMoveコントローラでUpload画面に遷移する
作成物
  1. Home/Index.cshtmlを修正してアップロード画面へのリンクを作成
  2. Moveコントローラを作成(Controllers/MoveController.cs)
  3. Uploadビューを作成(Views/Move/Upload.cshtml)

ASP.NET MVC入門 - おっさんの備忘録

コード

Views/Home/Index.cshtml(修正)

@{
    ViewData["Title"] = "Home Page";
}
<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    @*追加 開始*@
    @Html.ActionLink("ファイルアップロード", "Upload","Move")
    @*追加 終了*@
</div>
Controllers/MoveController.cs(新規)

using Microsoft.AspNetCore.Mvc;

namespace FileUploadDownload.Controllers
{
    public class MoveController : Controller
    {
        public IActionResult Upload()
        {
            return View();
        }
    }
}
Views/Move/Upload.cshtml(新規)

@
    For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
}

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>upload</title>
</head>
<body>
    upload
</body>
</html>

ASP.NET MVC入門

ASP.NET

ブラウザ向けのWebアプリケーション開発と、アプリケーション連携を意図したWebサービス開発のための技術

ASP.NET MVC

M(モデル)、V(ビュー)、C(コントローラ)からなるアプリケーションの役割毎に、分離したアーキテクチャ. "コントローラ"は、"フロント・コントローラ"から処理を委譲させて、個々のリクエストに応じた処理を行うためのクラス. "フロント・コントローラ"はクライアントからのリクエストを一か所で受け取るための仕組み. リクエストの振り分けをURLに基づいて行うことを"URLルーティング"と呼び、振り分けのルールを"ルート"と呼ぶ

プロジェクト初期のフォルダについて
フォルダ/ファイル名 コンテンツ
Controllers クライアントからのリクエストを処理するコントローラクラスが格納される
Models データソースを操作するためのクラス
Views 最終的な出力を生成するためのビュー
Scripts JavaScriptライブラリ
Content Cssや画像ファイルなど
App_Data アプリケーションで利用するデータやファイル
Global.asax ルーティング設定を行うためのグローバルアプリケーションファイル
Web.config アプリケーション設定ファイル
コントローラクラス
  1. クラス名は必ず"Controller"で終わらなければならない
  2. 実際の処理を記述するのは、"アクションメソッド"で、クラスは以下のパブリックメソッドは無条件で"アクションメソッド"とみなされる
  3. アクションの結果はActionResultオブジェクトで表され、コントローラクラスで用意されたヘルパーメソッドによって取得できる
  4. Viewsフォルダ配下に"コントローラ名/アクション名"の.cshtmlで配置することによって、ビューが作成される

【Java】Optionalの基礎1

java.util.Optionalは値をラップして、その値がnullかもしれないことを表現するクラス。
これによって、煩雑な記述を減らすことにより、プログラムの堅牢度を高める。

Optionalを使用する場面の想定はメソッドの戻り値

クラス間の結合度について

あるメソッドの戻り値として、nullが来る可能性がある場合、使用側はこれを知っている必要がある。
⇒知識を必要としており、多少なりともクラス間の結合度が密になる。
Optionalを使用することによって、ユーザはメソッドの戻り値としてnullが来る可能性があることが分かる。

例:定義側

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Optional;

public class MyOptional{
    private final ArrayList<String> LIST
        = new ArrayList<String>(Arrays.asList("Test", null, "Rest"));
    public Optional<String> getFromList(){
        var num = (int)(Math.rondom()*3);
        return Optional.ofNullable(this.LIST.get(num));
    }
}
例:呼び出し側

public class Exec{
    var myOpt = new MyOptional();
    // String str1 = myOpt.getFromList(); // error
    String str2 = myOpt.getFromList().orElse("NULL");
    var opt1 = myOpt.getFromList();
    Optional<String> opt2 = myOpt.getFromList();
}