C#を使用して、GridViewとBoundFieldsを使用してExcelファイルをプログラムで生成しています。今は一定の値を純粋なテキストとして保持するのではなく、日付に変換し続けます。GridView BoundFieldを書式設定して、テキストを日付に変換しないようにします。
Excelからの変換なしで、DBから返されたままにしておきたいです。私はいくつかのオプションを検討しましたが、この変換を回避することはできません。
これは直接ファイルに表示されます。
問題のあるBoundFieldは "ReportNumber"です。皆さんがお手伝いいただきありがとうございます。
コードスニペット:具体的なデータがない場合
[HttpGet]
public ActionResult AFDOJClosed2Excel(byte[] Data, string Reporting_Year)
{
try
{
DataTable dt = GetAFDOJClosed(Reporting_Year);//your datatable
DataView dv = dt.DefaultView;
dv.Sort = "Case_Number ASC";
DataTable sortedDT = dv.ToTable();
dt = sortedDT;
GridView excel = new GridView();
excel.DataSource = dt;
excel.AutoGenerateColumns = false;
//Explicitly Create bound fields
BoundField CaseNumber = new BoundField();
CaseNumber.HeaderText = "Case Number";
CaseNumber.DataField = "Case_Number";
excel.Columns.Add(CaseNumber);
BoundField Docket = new BoundField();
Docket.HeaderText = "Docket";
Docket.DataField = "Docket";
excel.Columns.Add(Docket);
BoundField AgencyName = new BoundField();
AgencyName.HeaderText = "Agency Name";
AgencyName.DataField = "Agency_Name";
excel.Columns.Add(AgencyName);
BoundField ReportNumber = new BoundField();
ReportNumber.HeaderText = "Report Number";
ReportNumber.DataField = "Report_Number";
excel.Columns.Add(ReportNumber);
BoundField ClosedDate = new BoundField();
ClosedDate.HeaderText = "Closed Date";
ClosedDate.DataField = "Closed_Date";
ClosedDate.DataFormatString = "{0:d}";
excel.Columns.Add(ClosedDate);
BoundField TotalDisbursed = new BoundField();
TotalDisbursed.HeaderText = "Total Disbursed";
TotalDisbursed.DataField = "Total_Disbursed";
TotalDisbursed.DataFormatString = "{0:C}";
excel.Columns.Add(TotalDisbursed);
excel.DataBind();
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment; filename=AFDOJClosed" + Reporting_Year + ".xls");
Response.ContentType = "application/ms-excel";
Response.Charset = "";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
excel.RenderControl(htw);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
return null;
}
catch (Exception ex)
{
ViewBag.ErrorMessage = ex.Message.ToString();
return View("Error");
}
}
ご回答いただきありがとうございます。この例で書式を追加してもOKです。その正反対の問題は、私がしたくないときの書式設定です。私はEPPlusの提案を試みます。 –
@JGrant私はあなたがそれをフォーマットしたくないと思っていますが、私はあなたの意図したデータフォーマットをコードから判断できませんでした。サンプルはExcelが決定するのではなく、目的のフォーマットに設定できることを示しています。 – DiskJunky
私はただそれを放っておきたいと思っていました。それは、3番目の位置にダッシュを入れた数字の文字列です。 Excelは「0」で始まる値のみを変換します。私はそれが7月として07を解釈しているので、そのことを知っています。私は洞察に感謝します。私にとっては、プレーンテキストの形式を指定することはできません。あるいは、「触れないでください」と言うスイッチがあります。 –