예제 #1
0
        private void ReadCSV()
        {
            //CSVファイル選択し、選択されなければ終了。
            if (this.openFileCSV.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            Address_DS ads     = new Address_DS();
            Address_DS errords = new Address_DS();

            //CSVファイルの読み込み
            using (TextFieldParser parser = new TextFieldParser(this.openFileCSV.FileName, System.Text.Encoding.GetEncoding("Shift-Jis")))
            {
                //CSVの区切り文字をセット
                parser.SetDelimiters(",");

                //1行目が存在するかチェック
                if (parser.EndOfData == true)
                {
                    //存在しない場合はメッセージボックスを表示して終了
                    MessageBox.Show(this, "読み込み可能な行がありません。");
                    return;
                }

                //1行目の読み込み
                ArrayList columnList = null;
                string[]  firstRows  = null;
                try
                {
                    firstRows  = parser.ReadFields();
                    columnList = new ArrayList(firstRows);
                }
                catch (MalformedLineException)
                {
                    //読み込み不可能な行であれば、終了する。
                    //存在しない場合はメッセージボックスを表示して終了
                    MessageBox.Show(this,
                                    "1行目のフォーマットがおかしいため、処理を続行できません。" + Environment.NewLine +
                                    "Excelでファイルを正しく開けるか確認してください。");
                    return;
                }

                using (ColumnSelectForm f = new ColumnSelectForm(columnList))
                {
                    //行選択画面を表示し、ユーザに読み込む行を指定してもらう
                    if (f.ShowDialog() != DialogResult.OK)
                    {
                        //選択されなければ、空のデータセットを返す。
                        return;
                    }

                    //1行目を読み込むならば、その行をデータセットに格納。
                    if (f.ReadFirstRow == true)
                    {
                        Address_DS.AddressRow aRow = ads.Address.NewAddressRow();
                        aRow.MailAddress = firstRows[f.SelectColumnIndex];
                        ads.Address.AddAddressRow(aRow);
                    }

                    //ユーザが指定した列を読み込む
                    while (parser.EndOfData == false)
                    {
                        try
                        {
                            //NULLや空文字列・すでに取り込まれた行を取り込まない。
                            string mailAddr = parser.ReadFields()[f.SelectColumnIndex];
                            if ((string.IsNullOrEmpty(mailAddr) == false) && (ads.Address.FindByMailAddress(mailAddr) == null))
                            {
                                if (TKMP.Writer.MailAddressCollection.IsAddressPattern(mailAddr) == true)
                                {
                                    Address_DS.AddressRow aRow = ads.Address.NewAddressRow();
                                    aRow.MailAddress = mailAddr;
                                    ads.Address.AddAddressRow(aRow);
                                }
                                else
                                {
                                    //メールアドレス形式でないものは、エラーリストに保存
                                    Address_DS.AddressRow aeRow = errords.Address.NewAddressRow();
                                    aeRow.MailAddress = mailAddr;
                                    errords.Address.AddAddressRow(aeRow);
                                }
                            }
                        }
                        catch
                        {
                            //行の解析に失敗したらその行をエラーリストに保存
                            Address_DS.AddressRow aeRow = errords.Address.NewAddressRow();
                            aeRow.MailAddress = string.Format("({0}行目は読み込みエラーです)", parser.ErrorLineNumber.ToString());
                            errords.Address.AddAddressRow(aeRow);
                        }
                    }
                }
            }

            //CSVファイルを読み取る。
            this._addressds.Merge(ads);

            //エラー情報をセットする。
            this._errorForm.ErrorList = errords;
        }
예제 #2
0
        /// <summary>
        /// 指定されたExcelファイルを読み込む
        /// </summary>
        private void ReadExcel()
        {
            //Excelファイル選択し、選択されなければ終了。
            if (this.openFileExcel.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            Address_DS ads     = new Address_DS();
            Address_DS errords = new Address_DS();

            // ExcelWorkBookオープン
            ExcelWorkBook wBook = new ExcelWorkBook();

            wBook.Open(this.openFileExcel.FileName);
            try
            {
                //1行目を読み込む
                ExcelWorkSheet sheet      = wBook.WorkSheets[0];
                ArrayList      columnList = new ArrayList();
                for (int col = sheet.FirstColumn; col <= sheet.LastColumn; col++)
                {
                    if (sheet.Cells[0, col].Value == null)
                    {
                        continue;
                    }
                    columnList.Add(sheet.Cells[0, col].Value);
                }

                //読み込み行がない場合は空のデータセットを返す。
                if (columnList.Count == 0)
                {
                    MessageBox.Show(this, "読み込み可能な行がありません。");
                    return;
                }

                using (ColumnSelectForm f = new ColumnSelectForm(columnList))
                {
                    //行選択画面を表示し、ユーザに読み込む行を指定してもらう
                    if (f.ShowDialog() != DialogResult.OK)
                    {
                        //選択されなければ、空のデータセットを返す。
                        return;
                    }

                    int readStartRowIndex = 0;
                    if (f.ReadFirstRow == true)
                    {
                        readStartRowIndex = 0;
                    }
                    else
                    {
                        readStartRowIndex = 1;
                    }


                    //ユーザが指定した列を読み込む
                    for (int row = readStartRowIndex; row <= sheet.LastRow; row++)
                    {
                        //NULLやすでに取り込まれたメールアドレスははずす。
                        if (!((sheet.Cells[row, f.SelectColumnIndex].Value == null) ||
                              ads.Address.FindByMailAddress(sheet.Cells[row, f.SelectColumnIndex].Value.ToString()) != null))
                        {
                            string mailAddr = sheet.Cells[row, f.SelectColumnIndex].Value.ToString();
                            //メールアドレス形式のアドレスのみ登録
                            if (TKMP.Writer.MailAddressCollection.IsAddressPattern(mailAddr) == true)
                            {
                                Address_DS.AddressRow aRow = ads.Address.NewAddressRow();
                                aRow.MailAddress = mailAddr;
                                ads.Address.AddAddressRow(aRow);
                            }
                            else
                            {
                                //メールアドレス形式でないものは、エラーリストに保存
                                Address_DS.AddressRow aeRow = errords.Address.NewAddressRow();
                                aeRow.MailAddress = mailAddr;
                                errords.Address.AddAddressRow(aeRow);
                            }
                        }
                    }
                }
            }
            finally
            {
                // ExcelWorkBookクローズ
                wBook.Close();
            }

            //Excelファイルを読み取る。
            this._addressds.Merge(ads);

            //エラー情報をセットする。
            this._errorForm.ErrorList = errords;
        }