2018年12月4日火曜日

SQL-Serverを使って、ブログ用のテーブルタグをExcelシートから生成する

今回の記事では、ブログに表を載せる時に使うテーブルタグを、Excelシートから簡単に生成する方法を考えてみました。

まぁ色々な方法があるのですが、今回は、格安節電モバイルPCの「ASUS E203NA」にせっかくSQL-Server 2017 Expressをインストールしてあるので、それを無理やり(?)活用してみようと思います。

※ちなみに、今回は(も?)全ての作業は、格安節電PC(連呼)の「ASUS E203NA」でやっています。

よく「通常の作業なら快適」と言われる格安PCですが、その「通常」とは具体的にこういった作業の事だろうと思われ、このPC結構やるなぁ!と個人的に笑顔です。


■(1)データ元(Excelシート)

↑まずは適当にExcelで表を作ります。

ちなみに、今回は本当に単純な表で、Excelに施した装飾は全部無視します。

シート名はSheet1のままにしておいて、このシートに書いた表1枚だけがテーブルタグに変換される・・・という仕様です。

これは1万5000円で購入したExcel 2016を使って作りましたが、無料版のExcel Mobileでも大丈夫なはず(有料Excel持ってないと編集できたかどうか?自信ないです)。

もう一つちなみに、ファイルを置く場所ですが、権限の知識があれば、OneDrive上でもいけます。

私は自分で作ったファイルは全てOneDriver上に置いています。

ただ、オンライン・オンリーだと、ネットワークの負荷がやばいので、ASUS E203NAだと、メモリカード・ドライブ上にリンクさせて実体をローカルでも管理しています。


■(2)SQL-Server 2017でクエリーを記述

↑超優秀なGUI管理ツールのManagement Studioを使って、ExcelからSQL-Server 2017にテーブル形式でデータを読んで来るクエリーを書きます。

せっかくなので、ストアドプロシージャ名SMT001として登録しておき、いつでもストアドプロシージャ名一発で実行できるようにしています。

なお、ExcelからSQL-Serverにデータを読めるようにする設定はこちらの記事を参考になさって下さい

ちなみに、Webで公開されている64bit版Access 2010のモジュールと、32bit版との共存知識が必要ですが、知識がないとPCが損傷するのであえてリンク先などはご紹介しないようにしています・・・すみません。

念のため、Access 2016の64bit版モジュール(英語版)も公開されていますので、32bitのOffice 2010を使う方は64bitのAccess 2016モジュールを使わないといけないです。

しかし、ともあれ簡単に出来る時代になりましたね!

昔話になりますが、64bit版OSの黎明期では、この技が使えずに四苦八苦していましたっけ((震災前の2010年、激闘の思い出))


■コード(ストアドプロシージャ)

この段階では別にSELECT文だけをそのまま実行する事も可能。

USE SPDB;
GO

-- --------------------------------------------------
-- Excelシートからブログ用のテーブルタグを生成するよ
-- --------------------------------------------------
CREATE PROC SMT001
AS
BEGIN
    WITH CTE_000 AS (
        SELECT *
              ,IIF(F1=0,N'<TH>' ,N'<TD>')  AS SF
              ,IIF(F1=0,N'</TH>',N'</TD>') AS EF
              ,ROW_NUMBER() OVER(ORDER BY F1,F2,F3,F4,F5,F6) 
                                           AS SORT_ORDER
          FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0'
             ,'Excel 8.0;DataBase=(パス省略)TABLESOURCE.xlsx;IMEX=1;HDR=NO'
             ,'SELECT * FROM [Sheet1$]') AS T
    )
    ,CTE_001 AS (
        SELECT N'<TR ' + IIF(F1=0,'style=''background-color:Orange;''','') + '>' +
               SF + CAST(F2 AS NVARCHAR(MAX)) + EF +
               SF + CAST(F3 AS NVARCHAR(MAX)) + EF +
               SF + CAST(F4 AS NVARCHAR(MAX)) + EF +
               SF + CAST(F5 AS NVARCHAR(MAX)) + EF +
               SF + CAST(F6 AS NVARCHAR(MAX)) + EF +
               N'</TR>' AS REC
              ,SORT_ORDER
              ,1        AS POS
         FROM CTE_000
    )
    ,CTE_002 AS (
        SELECT '<TABLE rules=''all'' ' + 
               'style=''border-style:solid;border-width 1 1 1 1;' + 
               'border-color:Brown''>' AS REC
              ,0 AS SORT_ORDER
              ,0 AS POS
         UNION ALL
        SELECT REC
              ,SORT_ORDER
              ,1 AS POS
          FROM CTE_001
         UNION ALL
        SELECT '</TABLE>' AS REC
              ,0 AS SORT_ORDER
              ,2 AS POS         
    )
    SELECT REC
      FROM CTE_002
     ORDER BY POS,SORT_ORDER;
END;



■実行する!

↑このように、Excelシートから、シンプルなテーブルタグが一発で生成されました。

あとはブログに貼る(私のブログは、HTMLをそのまま書くタイプなので・・・)だけです。


↑SQL-Serverの出力結果をそのままコピーし、ブログの入力欄にぺたっと貼るだけ!

長いテーブルタグも一発です。


■実行結果

テーブルタグを貼り付けると以下のようになります。

場所項目方法設定
Windowsの設定システムこのPCへのプロジェクションこのPCへのプロジェクション > 一部の~このPCに映すこ常にオフ
Windowsの設定システムストレージストレージセンサーオフ
Windowsの設定システムマルチタスクタイムライン > ときどきタイムラインにおすすめを表示するオフ
Windowsの設定システム共有エクスペリエンスデバイス間の共有 > 他のデバイス~許可するオフ
Windowsの設定プライバシーアクティビティの履歴全ての項目(チェックボックス含む)オフ
Windowsの設定プライバシーアプリの診断アプリに診断の情報へのアクセスを許可するオフ
Windowsの設定プライバシーカメラアプリかカメラにアクセスできるようにするオフ
Windowsの設定プライバシーバックグラウンドアプリアプリのバックグラウンド実行を許可する(先頭の一括スイッチ)オフ
Windowsの設定プライバシー他のデバイスペアリングされていないデバイスとの通信オフ
Windowsの設定プライバシー全般全ての項目オフ
Windowsの設定プライバシー診断&フィードバック全ての項目オフ
アプリMicrosoft Store設定アプリ更新>アプリを自動的に更新オフ
アプリMicrosoft Store設定ビデオの自動再生>ビデオを自動的に再生するオフ
アプリMicrosoft Store設定ライブタイル>タイルに製品を表示するオフ
サービスsuperfetchプロパティまず停止。スタートアップの種類の設定無効
システムシステムの詳細設定詳細設定パフォーマンス>設定>詳細設定>仮想メモリ>変更>カスタムサイズ16MB~4096MB
ドライブのデフラグと最適化スケジュールされた最適化設定の変更スケジュールに従って実行するオフ
更新とセキュリティWindows Update詳細オプションWindowsの更新時~更新プログラムも入手します。オフ
↑これは、私が「ASUS E203NA」を軽量化すべく行ったWindows 10チューニングです。

もっとエグイ事もやってるのですが、そこは割愛しています。

ちなみに、何も考えずに全部やってはいけませんです。

あくまでも「私は」という条件であって、人によっては必要な項目も切っている可能性があります。

それに、別に遅くねーし!という方はもともとチューニングしなくていいという。

ただ、上記のチューン後は、ASUS E203NAはかなり軽快でさくさくです。

格安PCは「通常の作業では問題ない」と言われますが、この作業、ブログ書くところまで含めて全部ASUS E203NAでやってますが、お世辞抜きでサクサク十分な速度。

あれっ、もしかしたら、マザーシップPCもそんなに必要じゃないのでは??なんていうささやきが聞こえたりして・・・。

まぁさすがに、映像系の処理は厳しいですから、なかなか・・・。