2019年6月18日火曜日

コーディング基準

雑談でコーディング基準について。

PG開発会社毎でそれぞれコーディング基準があって、
まったく異なる(時には真逆)の基準だったりする。

オイラ的にはVB.NETの場合

IF A=B THEN C=1

ってのはちょっと気持ち悪くて

IF A=B THEN
    C=1
END IF

としたい所なんだけど、1行に書かないとNGになる基準もあるらしい。
確かに行数は増えるけどさ、修正しやすは後者だと思うんだよね。
まぁ昔のBASICだともっと省略してたけどw

まぁ元受けの基準に従うしかないのだけど、ちょっと愚痴ってみたw

2019年2月13日水曜日

C#からEXCEL読込(一括)

もう1年以上更新してなかったw

久しぶりに小ネタを。
アプリからEXCELファイルを読み込むってのは業務アプリ開発で
ありがちな依頼だったりする。

で、オイラもそんなC#開発依頼を受けて。

まず、参照設定にMicrosoft.Office.Interop.Excelを追加
(サードパーティ使用不可だからw)

以下、データ取得のソース
-----------------------------------------------------------------------------------------
            // データ格納エリア
            object[,] RangeDatas = null;
            Microsoft.Office.Interop.Excel.Application Exl = null;
            Microsoft.Office.Interop.Excel.Workbooks xlsBooks = null;
            Microsoft.Office.Interop.Excel.Workbook xlsBook = null;
            Microsoft.Office.Interop.Excel.Sheets xlsSheets = null;
            Microsoft.Office.Interop.Excel.Worksheet xlsSheet = null;
            Microsoft.Office.Interop.Excel.Range xlsRange = null;
            try
            {
                // EXCEL起動
                Exl = new Microsoft.Office.Interop.Excel.Application
                {
                    DisplayAlerts = false
                };
                try
                {
                    // Books指定
                    xlsBooks = Exl.Workbooks;
                    try
                    {
                        // Book読込
                        xlsBook = xlsBooks.Open(FILENAME);
                        try
                        {
                            //EXCEL Sheets
                            xlsSheets = xlsBook.Sheets;
                            try
                            {
                                //EXCEL Sheet(1シート目)
                                xlsSheet = xlsSheets[1] as Microsoft.Office.Interop.Excel.Worksheet;
                                try
                                {
                                    //使用セル
                                    xlsRange = xlsSheet.UsedRange;
                                    RangeDatas = xlsRange.Value;
                                }
                                catch { }
                                finally
                                {
                                    if (xlsRange != null)
                                    {
                                        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsRange);
                                    }
                                    xlsRange = null;
                                }
                            }
                            catch { }
                            finally
                            {
                                if (xlsSheet != null)
                                {
                                    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsSheet);
                                }
                                xlsSheet = null;
                            }
                        }
                        catch { }
                        finally
                        {
                            if (xlsSheets != null)
                            {
                                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsSheets);
                            }
                            xlsSheets = null;
                        }
                    }
                    catch { }
                    finally
                    {
                        if (xlsBook != null)
                        {
                            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsBook);
                        }
                        xlsBook = null;
                    }
                }
                catch { }
                finally
                {
                    if (xlsBooks != null)
                    {
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsBooks);
                    }
                    xlsBooks = null;
                }
            }
            catch { }
            finally
            {
                if (Exl != null)
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(Exl);
                }
                Exl = null;
            }

-----------------------------------------------------------------------------------------
使用したオブジェクトを明示的に開放してやらないと駄目なんで
めんどくさいけど仕方ない。
これでRangeDatasにEXCELセルのデータが入るのだけど・・・・

日付データとかは日付型で入るわけでもない。
EXCELに表示されている値を取り込みたいとなると
ループで各セルを回して.Textを取得する必要があるみたい。
(一括で取得する方法があれば良いけど・・・・)