web-dev-qa-db-ja.com

ExcelがテキストとしてフォーマットされるようにHTMLテーブルセルをフォーマットしますか?

Excelでスプレッドシートとして開くHTMLテーブルを作成しています。セルのコンテンツをテキストとして表示するためにExcelに「伝える」ために使用できるHTMLタグまたはCSSスタイルは何ですか?

33
dmr

数値、テキスト、日付などのセルに書式設定を適用できます。

これに関する以前の回答を参照してください: HTML to Excel:列を数値として扱うようにExcelに指示するにはどうすればよいですか?

(調整されたスニペット)

ページにCSSクラスを追加する場合:

.num {
  mso-number-format:General;
}
.text{
  mso-number-format:"\@";/*force text*/
}

そして、それらのクラスをTDに平手打ちします、それは機能しますか?

<td class="num">34</td>
<td class="num">17.0</td>
<td class="text">067</td>
100
scunliffe

そのソリューションの使用には1つの問題があります(数値形式のcssスタイル)。 Excelは、「テキストとして保存された番号」というエラーを表示しますが、これは場合によっては不便です。この問題を回避するために、フィールドの先頭でゼロ幅スペース文字(#8203;)を使用することができます。

13
Raposo

改行しないスペース&nbsp;の値の前<td>要素。
例:<td>&nbsp;0:12:12.185</td>
の代わりに: <td>0:12:12.185</td>

7
WhiteOne

私はコメントしたり、投票したりするのに十分な担当者がいませんが、ラポソの答えは私にとって非常にうまくいきました。システムはSSRSレポートをインポートし、ローカルモードで実行します。 DataSetクエリをデータベースに保存し、実行時にそれらを取得します。ただし、Excelエクスポートの場合、クエリの結果データをDataGridオブジェクトに実行し、それをHTMLとしてストリームに直接書き込み、拡張子を.xlsに設定します。 RaposoのソリューションをレポートのDataSetクエリに追加します。

SELECT someColumn = '&#8203;' + someColumn 
FROM, etc.

sSRSフィールドの式から削除します。

=Replace(Fields!someColumn.Value, "&#8203;", "")

私が見つけた唯一の作品です。ありがとう!

この問題に対する5つの解決策を見つけました。

  1. Scunliffeの説明に従って、フィールドをテキストとしてフォーマットします。これには、Raposoが述べた緑色の三角形の問題があります。

  2. #8203を使用します。 Raposoの説明どおり。これには、値が実際には数値ではないという問題があります。これは、データが処理のために何らかのシステムに取り込まれた場合に問題になる可能性があります。

  3. TD as <td> = "067" </ td>を追加します。これには、#2と同じ問題があります。

  4. TD as <td> = text(067、 "000")</ td>を追加します。これも#2と同じ問題があります。

  5. .text3 {mso-number-format: "000";}のCSSクラスを使用し、このクラスをTDに追加します。これは私の推奨する解決策ですが、長さが異なる場合は複数のクラスが必要になるという問題があります。ヘッダーを作成してからデータを反復処理する場合、必要なクラスを知る前に、考えられるすべてのクラスを追加する必要があります。しかし、これには、テキストが実際に数字であり、緑色の三角形がないという利点があります。

2
Stephen

素晴らしいソリューション!私は以下のようにしました

HttpContext.Current.Response.Write("<style>  .txt " + "\r\n" + " {mso-style-parent:style0;mso-number-format:\"" + @"\@" + "\"" + ";} " + "\r\n" + "</style>");
HttpContext.Current.Response.Write("<Td class='txt'>&#8203;");
HttpContext.Current.Response.Write(Coltext);
HttpContext.Current.Response.Write("</Td>");

そしてそれは私のためにうまくいきます

2
Muhammad Yousaf

値の前に一重引用符を追加してみてください。

'

あなたの細胞は

<td>'007</td>

これが私にとって有効な唯一のソリューションでした。私のソリューションが機能する「Open Office」と「Libre Office」で働いていた居住者はいませんでした。そして最良の部分は、値をコピーしても一重引用符がコピーされないことです。

0
ANDiTKO