MW211 EXIT

devlog
PHP/MSSQLの#ローカル一時テーブル
2021年10月23日
PHPの(MSSQLのPDOの)既定では、MSSQLの#ローカル一時テーブルが使えない。

「PDO::SQLSRV_ATTR_DIRECT_QUERY」の設定を変えればつかえるようになる。
┌──────────────────────────────────────┐
│$conn = new PDO(~);                                                        │
│$conn->setAttribute(constant('PDO::SQLSRV_ATTR_DIRECT_QUERY'), TRUE);       │
└──────────────────────────────────────┘
どのような副作用があるのかよくわからない(けど目立った影響は見当たらない)。
分類:PHP
jQuery/データのインポート
2021年10月22日
以下のような感じで。

【HTML】
┌──────────────────────────────────────┐
│<form>                                                                      │
│  <input type="hidden" name="キー" value="upfile">                          │
│  <input type="file" name="upfile">                                         │
│  <input type="button" value="インポート">                                  │
│</form>                                                                     │
│<input type="text" id="file_name" readonly="readonly">                      │
└──────────────────────────────────────┘
  ※POST項目は、$.ajax()のdataではなく、form内のhiddenで定義

【jQuery(JavaScript)】
┌──────────────────────────────────────┐
│$('form :button').on('click', function() {                                  │
│    const formData = new FormData($('form').get(0));                        │
│    $.ajax({                                                                │
│            url         :URLを指定,                                         │
│            type        :'post',                                            │
│            data        :formData,                                          │
│            processData :false,            // 変換しない                    │
│            contentType :false,            // content-typeヘッダを送信しない│
│            cache       :false,            // キャッシュをクリア            │
│            dataType    :'json',                                            │
│        })                                                                  │
│        .done(function(data, status, xhr) {                                 │
│            alert('インポート成功');                                        │
│        })                                                                  │
│        .fail(function(xhr, status, error) {                                │
│            alert('エラー');                                                │
│        })                                                                  │
│        .always(function(data, status, xhr) {                               │
│            $('#file_name').val($('form :file').prop('files')[0].name);     │
│            $('form')[0].reset();                                           │
│        });                                                                 │
│    });                                                                     │
└──────────────────────────────────────┘
  ※ファイルの内容を変更してそのまま再インポートするとエラーとなるので
    インポート後に一旦クリアして回避(ファイル名の引き継ぎも)

【PHP】
┌──────────────────────────────────────┐
│$ファイル全文 = file_get_contents($_FILES[$_POST['キー']]['tmp_name']);     │
└──────────────────────────────────────┘
  ※CSVファイルやTSVファイルを全文取得して、後は配列に格納して処理
分類:jQuery
PHP配列/特定列の重複を抽出
2021年10月21日
┌──────────────────────────────────────┐
│$hash = [                                                                   │
│    ['id' => 'a', 'data' => 'x'],                                           │
│    ['id' => 'b', 'data' => 'y'],                                           │
│    ['id' => 'a', 'data' => 'z'],                                           │
│];                                                                          │
└──────────────────────────────────────┘
上記のような二次元連想配列があり、特定の列(今回は'id')が重複している場合
それを一次元配列に抽出する方法。

以下のような感じ
┌──────────────────────────────────────┐
│$duplicates = array_keys(                                                   │
│                  array_filter(                                             │
│                      array_count_values(                                   │
│                          array_column($hash, 'id')                         │
│                      ),                                                    │
│                      function($value) {return ($value > 1);}               │
│                  )                                                         │
│              );                                                            │
└──────────────────────────────────────┘
分類:PHP配列
PHP/起動時にtrack_errorsのエラー
2021年10月19日
┌──────────────────────────────────────┐
│Directive 'track_errors' is deprecated in Unknown on line 0                 │
└──────────────────────────────────────┘
PHP起動時に以下のエラーが出る場合…
PHP7.2以降では「track_errors」機能が非推奨となったためとのことで
┌──────────────────────────────────────┐
│track_errors = Off                                                          │
└──────────────────────────────────────┘
「php.ini」の指定で上記を「On」から「Off」にすれば解決する。

なお、「track_errors」機能の代わりに「error_get_last()」関数が
使えるようになったとのこと。
分類:PHP
PHP/SQLiteのDLLでエラー
2021年10月18日
┌──────────────────────────────────────┐
│extension=php_pdo_sqlite.dll                                                │
│extension=php_sqlite3.dll                                                   │
└──────────────────────────────────────┘
「PHP.ini」で上記を指定していて、実体もあるのに
起動時に以下のPHPエラー(警告)が出る場合…
┌──────────────────────────────────────┐
│PHP Startup: Unable to load dynamic library 'php_pdo_sqlite.dll' (tried: ~ │
│PHP Startup: Unable to load dynamic library 'php_sqlite3.dll' (tried: ~    │
└──────────────────────────────────────┘
Apacheの「httpd.conf」に以下(~は各自のパス)を追加したら解決した。
┌──────────────────────────────────────┐
│LoadFile "~\libsqlite3.dll"                                                │
└──────────────────────────────────────┘
「php_pdo_sqlite.dll」と「php_sqlite3.dll」の一部が
「libsqlite3.dll」になったらしく、こちらもインクスルードする必要があるらしい。
分類:PHP
ExcelVBA/ファイル・フォルダ選択
2021年10月05日
いろいろ方法があるのでまとめていきたいが、ひとまず一例。

【ファイル選択】
┌──────────────────────────────────────┐
│Dim ファイルパス As String                                                  │
│' 本ファイルのフォルダを既定に                                              │
│ChDir ThisWorkbook.Path                                                     │
│If Left(ThisWorkbook.Path, 1) <> Left(CurDir, 1) Then                       │
│    ChDrive Left(ThisWorkbook.Path, 1)                                      │
│End If                                                                      │
│' 選択ダイアログ表示                                                        │
│ファイルパス = Application.GetOpenFilename( _                               │
│    Title:="ファイルを選択してください。", _                                │
│    Filefilter:="Excelファイル,*.xlsm" _                                    │
│)                                                                           │
│If ファイルパス = "False" Then                                              │
│    MsgBox "キャンセル"                                                     │
│End If                                                                      │
└──────────────────────────────────────┘

【フォルダ選択】
┌──────────────────────────────────────┐
│Dim フォルダパス As String                                                  │
│With Application.FileDialog(msoFileDialogFolderPicker)                      │
│    .Title = "フォルダを選択してください。"                                 │
│    .InitialFileName = ThisWorkbook.Path & "\"                              │
│    If .Show Then                                                           │
│        フォルダパス = .SelectedItems(1)                                    │
│    End If                                                                  │
│End With                                                                    │
└──────────────────────────────────────┘
分類:ExcelVBA
複合キーでVLOOKUP(連想配列版)
2021年10月04日
一旦、連想配列にデータをぶちこんで、それで直接アクセスするやり方。
キーをタブ結合(タブじゃなくてもいいけど)で、一つにするのがポイント。
┌──────────────────────────────────────┐
│Dim yMax As Long, y As Long, 連想配列 As Object, キー As String             │
│Set 連想配列 = CreateObject("Scripting.Dictionary")                         │
├──────────────────────────────────────┤
│' 連想配列に格納                                                            │
│With 参照シート                                                             │
│    yMax = .UsedRange.Rows(.UsedRange.Rows.Count).Row                       │
│    For y = 2 To yMax                                                       │
│        キー = .Cells(y, Xキー1).Value & vbTab & .Cells(y, Xキー2).Value    │
│        If Not 連想配列.Exists(キー) Then                                   │
│            連想配列.Add キー, .Cells(y, Xバリュー).Value                   │
│        End If                                                              │
│    Next y                                                                  │
│End With                                                                    │
├──────────────────────────────────────┤
│' 連想配列を検索                                                            │
│キー = キー1 & vbTab & キー2                                                │
│If 連想配列.Exists(キー) Then                                               │
│    MsgBox 連想配列(キー)                                                   │
│End If                                                                      │
└──────────────────────────────────────┘
結構速いし、小難しい処理(該当なしで例外とか)がないのでいいかも。
分類:ExcelVBA
業務連絡
2021年09月18日
MySQLからSQLiteへ移行しました。
jQuery/CSVダウンロード・別ウインドウ表示
2021年09月17日
jQueryでCSVファイルを生成しダウンロードさせるには以下のような感じ。
┌──────────────────────────────────────┐
│const blob = new Blob([CSVデータ], {'type':'text/csv'});                    │
│$('<a></a>', {                                                              │
│    'href'      :window.URL.createObjectURL(blob),                          │
│    'download'  :'エクスポート.csv',                                        │
│    'target'    :'_blank'                                                   │
│})[0].click();                                                              │
└──────────────────────────────────────┘
アンカーリンクを生成し、クリックするようなイメージになる。

なお、UTF-8のBOMを先頭に付加する場合は以下のような感じとなる。
┌──────────────────────────────────────┐
│const bom = new Uint8Array([0xEF, 0xBB, 0xBF]);                             │
│const blob = new Blob([bom, CSVデータ], {'type':'text/csv'});               │
│$('<a></a>', {                                                              │
│    'href'      :window.URL.createObjectURL(blob),                          │
│    'download'  :'エクスポート.csv',                                        │
│    'target'    :'_blank'                                                   │
│})[0].click();                                                              │
└──────────────────────────────────────┘

これと同じように自ら生成したHTMLを別ウインドウに開くこともできる。
┌──────────────────────────────────────┐
│const blob = new Blob([HTMLソースコード], {'type':'text/html'});            │
│$('<a></a>', {                                                              │
│    'href'      :window.URL.createObjectURL(blob),                          │
│    'target'    :'_blank'                                                   │
│})[0].click();                                                              │
└──────────────────────────────────────┘
分類:jQuery
ExcelVBA/図形内の改行
2021年08月27日
図形内Textの改行は「vbCrLf」で入力しても「vbCr」になる模様。
「vbLf」かと思った違った。
なお、正規表現は「\r」で代用できる。
分類:ExcelVBA
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 … 156 次へ