#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