【C#】CSV TSV输出文件生成

#region csvWriter CSV出力を行う。(カンマ区切り)
        /// <summary>
        /// CSV出力を行う。
        /// </summary>
        /// <param name="fileName">出力する場合の初期ファイル名(.csvは付けないで)</param>
        /// <param name="dt">出力データ</param>
        /// <param name="isOutput">出力するか</param>
        /// <returns>CSV文字列</returns>
        public static string csvWriter(string fileName, DataTable dt, WebFormBase webForm, bool isOutput = true)
        {

            // CSV全情報格納用
            var sbCSVAllLine = new StringBuilder();
            // CSV単体行格納用
            var sbCSVLine = new StringBuilder();

            // カラム情報を設定する。
            var isFirstTime = true;
            for (var col = 0; col < dt.Columns.Count; col++)
            {
                // 初回ではない場合カンマを設定する。
                if (isFirstTime)
                    isFirstTime = false;
                else
                    sbCSVLine.Append(",");

                // カラム名を追加する。
                sbCSVLine.Append(dt.Columns[col].ColumnName.Trim());
            }

            //全体情報に格納する。
            sbCSVAllLine.AppendLine(sbCSVLine.ToString());

            // 各行を設定する。
            for (var row = 0; row < dt.Rows.Count; row++)
            {
                var drRow = dt.Rows[row];

                // カラムでループする。
                isFirstTime = true;
                sbCSVLine.Clear();
                for (var col = 0; col < dt.Columns.Count; col++)
                {
                    // 初回ではない場合カンマを設定する。
                    if (isFirstTime)
                        isFirstTime = false;
                    else
                        sbCSVLine.Append(",");

                    var datatype = dt.Columns[col].DataType;
                    // 文字列型の場合
                    if (datatype.ToString().Equals("System.String"))
                    {
                        sbCSVLine.Append(string.Format("\"{0}\"", drRow[col].ToString()));
                    }
                    // 数値型の場合
                    else
                    {
                        sbCSVLine.Append(drRow[col].ToString());
                    }
                }

                //全体情報に格納する。
                sbCSVAllLine.AppendLine(sbCSVLine.ToString());
            }

            // 出力する場合のみ、以下の処理を行う。
            if (isOutput)
            {
                //書き込み
                webForm.Response.ContentType = "application/octet-stream";
                var strFileNameEncode = HttpUtility.UrlEncode(fileName + ".csv");
                webForm.Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileNameEncode);
                var encoding = Encoding.GetEncoding("Shift-JIS");
                webForm.Response.BinaryWrite(encoding.GetBytes(sbCSVAllLine.ToString()));
                webForm.Response.Flush();
                webForm.Response.End();
            }

            return sbCSVAllLine.ToString();

        }
        #endregion
        #region tsvWriter TSV出力を行う。(タブ区切り)
        /// <summary>
        /// TSV出力を行う。
        /// </summary>
        /// <param name="fileName">出力する場合の初期ファイル名(.tsvは付けないで)</param>
        /// <param name="dt">出力データ</param>
        /// <param name="isOutput">出力するか</param>
        /// <returns>TSV文字列</returns>
        public static string tsvWriter(string fileName, DataTable dt, WebFormBase webForm, bool isOutput = true)
        {

            // TSV全情報格納用
            var sbTSVAllLine = new StringBuilder();
            // TSV単体行格納用
            var sbTSVLine = new StringBuilder();

            // カラム情報を設定する。
            var isFirstTime = true;
            for (var col = 0; col < dt.Columns.Count; col++)
            {
                // 初回ではない場合タブを設定する。
                if (isFirstTime)
                    isFirstTime = false;
                else
                    sbTSVLine.Append("\t");

                // カラム名を追加する。
                sbTSVLine.Append(dt.Columns[col].ColumnName.Trim());
            }

            //全体情報に格納する。
            sbTSVAllLine.AppendLine(sbTSVLine.ToString());

            // 各行を設定する。
            for (var row = 0; row < dt.Rows.Count; row++)
            {
                var drRow = dt.Rows[row];

                // カラムでループする。
                isFirstTime = true;
                sbTSVLine.Clear();
                for (var col = 0; col < dt.Columns.Count; col++)
                {
                    // 初回ではない場合タブを設定する。
                    if (isFirstTime)
                        isFirstTime = false;
                    else
                        sbTSVLine.Append("\t");

                    var datatype = dt.Columns[col].DataType;
                    // 文字列型の場合
                    if (datatype.ToString().Equals("System.String"))                    
                        sbTSVLine.Append(string.Format("\"{0}\"", drRow[col].ToString()));
                    
                    // 数値型の場合
                    else                    
                        sbTSVLine.Append(drRow[col].ToString());                    
                }

                //全体情報に格納する。
                sbTSVAllLine.AppendLine(sbTSVLine.ToString());
            }

            // 出力する場合のみ、以下の処理を行う。
            if (isOutput)
            {
                //書き込み
                webForm.Response.ContentType = "application/octet-stream";
                var strFileNameEncode = HttpUtility.UrlEncode(fileName + ".tsv");
                webForm.Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileNameEncode);
                var encoding = Encoding.GetEncoding("Shift-JIS");
                webForm.Response.BinaryWrite(encoding.GetBytes(sbTSVAllLine.ToString()));
                webForm.Response.Flush();
                webForm.Response.End();
            }

            return sbTSVAllLine.ToString();
        }
        #endregion

上边是具体的文件下载的方式,其中数据的输入如下:

#region btnTSV_Click:TSVボタンクリック処理
    /// <summary>
    /// CSVボタンクリック処理
    /// </summary>
    protected void btnTSV_Click(object sender, EventArgs e)
    {
        try
        {
            // 処理内容を保存
            EventName = System.Reflection.MethodBase.GetCurrentMethod().Name;
            WorkName = Message.getEventButtonClick(this.btnTXTFile.Text);

            // 開始ログ出力
            this.infoLogWrite(this.getLogMessage(SubFunction1.getStartLogMessage(this.LangKbn)), this.Name);
            DataSet tmpds = this.getTSVData(this.DbConnection);

            // 対象データの確認
            if (tmpds.Tables[0].Rows.Count == 0)
            {
                // エラーメッセージを表示する。
                AlertMessage(Message.getNotOutputData());
                //AlertMessage("出力対象データがありません。");
                return;
            }

            // 出力対象情報を作成する。
            DataTable dtOutput = new DataTable();
            DataSet csvLabel = SubSQLFunction1.getMS001Data(this.LangKbn, this.Name, this.DbConnection);

            // 各カラムを追加する。
            for (int i = 3; i <= 48; i++)
            {
                dtOutput.Columns.Add(csvLabel.Tables[0].Rows[0][i].ToString(), typeof(String));
            }
            //dtOutput.Columns.Add("PFコード", typeof(String));
            //dtOutput.Columns.Add("PFレベル名", typeof(String));
            //dtOutput.Columns.Add("PFラベル", typeof(String));
            //dtOutput.Columns.Add("PF名", typeof(String));
            //dtOutput.Columns.Add("PF略称", typeof(String));
            //dtOutput.Columns.Add("親PFコード", typeof(String));
            //dtOutput.Columns.Add("親名略称", typeof(String));
            //dtOutput.Columns.Add("親名", typeof(String));
            //dtOutput.Columns.Add("PF区分", typeof(String));
            //dtOutput.Columns.Add("PF区分名", typeof(String));
            //dtOutput.Columns.Add("仕入先", typeof(String));
            //dtOutput.Columns.Add("提携企業名", typeof(String));
            //dtOutput.Columns.Add("PF色コード", typeof(String));
            //dtOutput.Columns.Add("PF色名", typeof(String));
            //dtOutput.Columns.Add("住所", typeof(String));
            //dtOutput.Columns.Add("電話", typeof(String));
            //dtOutput.Columns.Add("FAX", typeof(String));
            //dtOutput.Columns.Add("県コード", typeof(String));
            //dtOutput.Columns.Add("県名", typeof(String)); 
            // 行を追加する。
            //foreach (MasterDataSet.Z4011080_01Row row in dsMeisai.Z4011080_01)
            for (int i = 0; i < tmpds.Tables[0].Rows.Count; i++)
            {
                // dtOutput.Rows.Add(new object[] {row.HENKO_KBN ? "可" : "不可" });  // 参照
                dtOutput.Rows.Add(new object[] { 
                    tmpds.Tables[0].Rows[i][0],
                    tmpds.Tables[0].Rows[i][2],
                    tmpds.Tables[0].Rows[i][1],
                    tmpds.Tables[0].Rows[i][3],
                    tmpds.Tables[0].Rows[i][4],
                    tmpds.Tables[0].Rows[i][5],
                    tmpds.Tables[0].Rows[i][6],
                    tmpds.Tables[0].Rows[i][7],
                    tmpds.Tables[0].Rows[i][8],
                    tmpds.Tables[0].Rows[i][9],
                    tmpds.Tables[0].Rows[i][10],
                    tmpds.Tables[0].Rows[i][11],
                    tmpds.Tables[0].Rows[i][12],
                    tmpds.Tables[0].Rows[i][13],
                    tmpds.Tables[0].Rows[i][14],
                    tmpds.Tables[0].Rows[i][15],
                    tmpds.Tables[0].Rows[i][16],
                    tmpds.Tables[0].Rows[i][17],
                    tmpds.Tables[0].Rows[i][17],
                    tmpds.Tables[0].Rows[i][18],
                    tmpds.Tables[0].Rows[i][19],
                    tmpds.Tables[0].Rows[i][17]
                });
            }

            // TSVを出力する。
            Processing.tsvWriter(this.Name + "_" + this.Title + "_" + DateTime.Now.ToString("yyyyMMdd") + DateTime.Now.ToString("HHmmss"), dtOutput, this);
            //SubFunction1.csvWriter(this.Name + "_" + this.Title + "_" + DateTime.Now.ToString("yyyyMMdd") + DateTime.Now.ToString("HHmmss"), dtOutput, this);

             終了ログ出力
            this.infoLogWrite(this.getLogMessage(SubFunction1.getEndLogMessage(this.LangKbn)), this.Name);
        }
        catch (System.Threading.ThreadAbortException)
        {
            // 終了ログ出力
            this.infoLogWrite(this.getLogMessage(SubFunction1.getEndLogMessage(this.LangKbn)), this.Name);
            return;
        }
        catch (Exception ex)
        {
            this.errorLogWrite(ex.ToString(), this.Name);
            throw ex;
        }
    }
    #endregion
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值