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; }
/// <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; }