unote 書けば書くほどに

20230226

            DataTable dtN = new DataTable();//全ての項目テーブル
            DataTable dtZ = new DataTable();//検索対象(NAME ALL)

            //全ての項目テーブル
            strSQL = "select * from DEPT";
            Console.WriteLine(strSQL);
            dtN = OraTableSelect(strSQL);

            //検索対象(NAME ALL)
            strSQL = "select DNAME from DEPT union select ENAME from EMP";
            Console.WriteLine(strSQL);
            dtZ = OraTableSelect(strSQL);

            //word列追加する
            dtN.Columns.Add("word");

            for (int m = 0; m < dtN.Rows.Count; m++)
            {
                string str = dtN.Rows[m]["DNAME"].ToString();
                if (str.Length > 2)
                {
                    dtN.Rows[m]["word"] = str.Substring(0, 2);
                }
                else
                {
                    dtN.Rows[m]["word"] = str;
                }
            }

            //aimai列を追加
            dtN.Columns.Add("aimai");

            int dtNrwCnt = dtN.Rows.Count;
            int X = 0;

            string strWord;
            string strAimai;

            for (int count = 0; count < dtNrwCnt; count++)
            {
                //検索ワードで全体から検索する
                strWord = dtN.Rows[X]["word"].ToString();

                DataTable dtZResult =
                    dtZ.AsEnumerable().Where(i => i["DNAME"].ToString().//★ZU★
                    Contains(strWord)).CopyToDataTable();

                int resCnt = dtZResult.Rows.Count; //検索結果の個数

                if (resCnt == 1)
                {
                    strAimai = dtZResult.Rows[0][0].ToString();     //あいまいword
                    dtN.Rows[X]["aimai"] = strAimai;                //あいまい検索結果の列に追加
                    X++;
                }

                else
                {
                    int Y = X;//行を追加する前の行数を保持

                    for (int ar = 0; ar <= resCnt - 1; ar++)                    
                    {
                        strAimai = dtZResult.Rows[ar][0].ToString();//あいまい検索結果
                        DataRow addrw = dtN.NewRow();               //追加する行を定義

                        if (ar == 0)
                        {
                            dtN.Rows[X + ar]["aimai"] = strAimai;
                        }

                        else
                        {
                            dtN.Rows.InsertAt(addrw, X + ar);                   //行追加(対象行,開始位置)
                            dtN.Rows[X + ar]["aimai"]   = strAimai;             //あいまい検索結果列に追加
                            dtN.Rows[X + ar]["word"]    = strWord;              //wordの列追加
                            dtN.Rows[X + ar]["DNAME"]   = dtN.Rows[Y]["DNAME"]; //DNAME列に追加
                        }                  
                    }

                    X = Y + resCnt;//次の行位置
                }
            }
            dataGridView1.DataSource = dtN;

■PDF変換方法
1. 一旦、wordに変換(word形式で良ければこれで完了)
 エクセルに変換したいPDFを右クリックしてメニューの
「プログラムから開く」を押し、次に「Word」を選択すると
wordで開かれる

2. Webページで保存
  Wordで開いたファイルを「Webページ(html)」形式で保存する

3. Excelの「開く」から保存したファイルを選択
  保存したWebページファイルをExcelで開く

参考)
https://www.amamoba.com/pc/pdf-excel.html#toc1
https://udemy.benesse.co.jp/business/office/change-word-into-excel.html


■REF

    • ★事前準備:A5を2つ起動するもしくはSQL plus
    • CREATE TABLE権限をREF_USERへ付与

GRANT CREATE TABLE TO REF_USER

    • 自分に付与されたロール一覧

select * from user_role_privs

    • Oracle全ユーザーの一覧を確認するALL_USERS・DBA_USERS

SELECT * FROM ALL_USERS
ORDER BY USERNAME