.tsvファイルを.xlsxに変換したい。【C#】

目次

経緯

.tsvファイルを.xlsxに変換したいと思い。

今回勉強しました。

「Microsoft.Office.Interop.Excel」を使用する

まず、プログラムの流れを説明します。

  1. btn_TSVtoExcelボタンを押す
  2. ダイアログが出てきて、変換したいtsvファイルを選ぶ
  3. デスクトップに.xlsxに変換されたファイルが保存される。

という流れです。下がコードです。

using Excel = Microsoft.Office.Interop.Excel;

private void btn_TSVtoExcel_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog
            {
                Filter = "TSVファイル (*.tsv)|*.tsv|すべてのファイル (*.*)|*.*",
                Title = "TSVファイルを選択してください"
            };

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                string tsvFilePath = openFileDialog.FileName;
                string xlsxFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), Path.GetFileNameWithoutExtension(tsvFilePath) + ".xlsx");

                try
                {
                    using (ExcelPackage excelPackage = new ExcelPackage())
                    using (StreamReader sr = new StreamReader(tsvFilePath, Encoding.GetEncoding("Shift_JIS")))
                    {
                        ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("Sheet1");
                        int rowIndex = 1;
                        string line;

                        while ((line = sr.ReadLine()) != null)
                        {
                            string[] fields = line.Split(new[] { '\t' }, StringSplitOptions.None);

                            for (int colIndex = 0; colIndex < fields.Length; colIndex++)
                            {
                                worksheet.Cells[rowIndex, colIndex + 1].Value = fields[colIndex];
                            }

                            rowIndex++;
                        }

                        excelPackage.SaveAs(new FileInfo(xlsxFilePath));
                    }

                    MessageBox.Show("デスクトップに.xlsxファイルが作成されました。", "変換完了", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"エラーが発生しました: {ex.Message}", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

このコードの難点は、処理速度がすごく遅いです。

データをただ変換するだけなら、これでもいいと思いますが、

そのあと、データを処理すとなると、たいへん時間がかかります。

何かの参考になれば、幸いです。

ここまで読んでいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次