40

データテーブルから Excel シートに値をコピーすると、先頭のゼロが失われます。これは、おそらく Excel が値をテキストではなく数値として扱うためです。

私は次のように値をコピーしています:

myWorksheet.Cells[i + 2, j] = dtCustomers.Rows[i][j - 1].ToString();

列全体または各セルをテキストとして書式設定するにはどうすればよいですか?

myWorksheet.Cells[i + 2, j] 関連する質問、 Intellisense でスタイル プロパティを表示するためにキャストする方法は?

4

9 に答える 9

50

以下は、Excel に似た API を持つSpreadsheetGear for .NETで、列 A と C をテキストとしてフォーマットするコードです。これを Excel / COM で動作するように変換する方法を理解するのはそれほど難しくありません。

IWorkbook workbook = Factory.GetWorkbook();
IRange cells = workbook.Worksheets[0].Cells;
// Format column A as text.
cells["A:A"].NumberFormat = "@";
// Set A2 to text with a leading '0'.
cells["A2"].Value = "01234567890123456789";
// Format column C as text (SpreadsheetGear uses 0 based indexes - Excel uses 1 based indexes).
cells[0, 2].EntireColumn.NumberFormat = "@";
// Set C3 to text with a leading '0'.
cells[2, 2].Value = "01234567890123456789";
workbook.SaveAs(@"c:\tmp\TextFormat.xlsx", FileFormat.OpenXMLWorkbook);

免責事項: 私は SpreadsheetGear LLC を所有しています

于 2010-01-14T22:34:56.013 に答える
6

Excel相互運用のために私のために働いた解決策:

myWorksheet.Columns[j].NumberFormat = "@";      // column as a text
myWorksheet.Cells[i + 2, j].NumberFormat = "@"; // cell as a text

このコードは、データを Excel に入れる前に実行する必要があります。列番号と行番号は 1 ベースです。

もう少し詳しく。SpreadsheetGear を参照して受け入れられた応答はほぼ正しいように見えますが、それについて 2 つの懸念がありました。

  1. 私は SpreadsheetGear を使用していません。サードパーティのライブラリを使用せずに、Excel 相互運用機能を介した通常の Excel 通信に興味がありました。
  2. 「A:A」のような範囲を使用せずに、列を数値でフォーマットする方法を探していました。
于 2016-02-08T22:41:09.743 に答える
6

Excel に書き込む前に、形式を変更する必要があります。

xlApp = New Excel.Application
xlWorkSheet = xlWorkBook.Sheets("Sheet1")

Dim cells As Excel.Range = xlWorkSheet.Cells

'set each cell's format to Text
cells.NumberFormat = "@"

'reset horizontal alignment to the right
cells.HorizontalAlignment = Excel.XlHAlign.xlHAlignRight
于 2014-08-06T14:24:31.573 に答える
4

私も最近この問題と闘い、上記の提案について 2 つのことを学びました。

  1. numberFormatting を @ に設定すると、Excel は値を左揃えにし、テキストのように読み取りますが、先頭のゼロは切り捨てられます。
  2. 先頭にアポストロフィを追加すると、Excel はそれをテキストとして扱い、0 を保持し、デフォルトのテキスト形式を適用して両方の問題を解決します。

これの誤解を招く側面は、セルに別の値があることです。幸いなことに、CSV にコピー/貼り付けまたはエクスポートする場合、アポストロフィは含まれません。

結論: 先頭のゼロを保持するには、numberFormatting ではなくアポストロフィを使用してください。

于 2012-04-03T22:12:01.197 に答える
2
   if (dtCustomers.Columns[j - 1].DataType != typeof(decimal) && dtCustomers.Columns[j - 1].DataType != typeof(int))
   {
      myWorksheet.Cells[i + 2, j].NumberFormat = "@";
   }
于 2012-12-19T16:44:24.817 に答える