こんにちは、jQuery と Microsoft ASP.net 2.0 を使用して Web 上でリッチ クライアント UI を開発しています。C# をサーバー側として使用しています。基本的に 2 つの問題があります。
- そのために、HTMLTextWriter および StringWriter クラス ライブラリを使用しています。私がインターネットで検索し、さまざまなチュートリアルやヒントから学んだことは、その場で Excel シートを生成する最も手頃な方法です。応答で作成された html を出力し、必要なヘッダーを設定してブラウザにどのような種類かを伝えるだけです。のデータが転送されており、その部分ではすべて正常に機能していますが、html を Excel スプレッドシートに変換する際に、ダウンロード ページの html マークアップを Excel マークアップにも追加します。
- データを出力した後に Response.Close() を呼び出すと、接続中止エラーが発生します。
これがコードスニペットです
public StringWriter getHTMLStream(){
出力 = 新しい StringWriter();
htmlWriter = 新しい HtmlTextWriter(出力);
文字列 html= @"
テーブル {mso-displayed-decimal-separator:'\.'; mso-displayed-thousand-separator:'\,';}.xlGeneral {padding-top:1px; パディング右:1px; パディング左:1px; mso-ignore:パディング; 色:ウィンドウテキスト; font-size:10.0pt; フォントの太さ:400; フォント スタイル:通常; テキスト装飾:なし; font-family:Arial; mso-generic-font-family:auto; mso-font-charset:0; mso-number-format:General; テキスト整列:一般; 垂直方向の位置合わせ:下; mso 背景ソース:自動; mso パターン:自動; 空白:nowrap;} ";
html+=""+this.headerName+"-"+this.vehicleName+"";
totalCols = (this.reportOrientation == "Horiz")?data.Columns.Count:2;
if (this.reportOrientation == "水平")
{
html+="";
// ヘッダー列を追加
foreach (this.data.Columns の DataColumn colName)
{
html+=""+colName.ColumnName.Trim()+"";
}
html+="";
// ここでデータを追加します
foreach (this.data.Rows の DataRow dr)
{
html+="";
foreach (dr.ItemArray 内の文字列 colData)
{
html+=""+colData+"";
}
html+="";
}
}
そうしないと
{
// 列を取得
colsArr = 新しい文字列[this.data.Columns.Count];
int colCounter = 0;
foreach (this.data.Columns の DataColumn colName)
{
colsArr[colCounter] = colName.ColumnName;
colCounter++;
}
//tableHeads = arrayToString(colsArr);
// 行データを文字列配列で取得
rowArr = 新しい文字列[this.data.Columns.Count];
foreach (this.data.Rows の DataRow dr)
{
colCounter = 0;
foreach (dr.ItemArray の文字列 col)
{
rowArr[colCounter] = col;
colCounter++;
}
}
//tableHeads = arrayToString(colsArr);
// PDF 表のセルを追加
for (int i = 0; i "+colsArr[i].Trim()+""+rowArr[i].Trim()+"";
}
}
html+= "";
htmlWriter.Write(html);
出力を返します。
}
プライベート文字列 arrayToString(string[] array){
string result = string.Join(",", array);
結果 = 結果.Substring(0, 結果.長さ - 1);
結果を返します。
}
}
そして、それが私がそれにアクセスする方法です
Response.Clear();
createHTML speedXLS = new createHTML("Vehicle Speed Report", "Horiz", vehicleName, speedDT);
Response.ContentType = "application/vnd.xls";
Response.AddHeader("content-disposition", "attachment;filename=VSpeedReport-" + vehicleName + ".xls");
Response.Write(speedXLS.getHTMLStream().ToString());
//Response.Close();
そして、必要なxlsマークアップの横にあるダウンロードページのマークアップが私のExcelマークアップに追加されています。応答本文にページのマークアップを追加しないようにサーバーに指示するにはどうすればよいですか?
**
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
</title></head>
<body>
<form name="form1" method="post" action="downloadData.aspx?reportType=speed&value=1&valUnit=Miles&reqType=XLS&selVehicle=GTA02&Email=gps%40gtalimo.com&startDate=2012-4-27+23%3a21%3a00&endDate=2012-4-28+01%3a21%3a00&vehicleName=GTA+07" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZKkkaxju0wAdoc1rGUJiLkzjS9eU" />
</div>
<div>
</div>
</form>
</body>
</html>
**
コメントや提案をお願いします! ありがとう!