2

OfficeOpenXmlを使用してExcelファイルに書き込みます。このファイルはテンプレートであるため、列のすべてのヘッダーとフォーマットが既に含まれています。基本的に10桁の数字である「特別な」列に先行ゼロを持つ数字を挿入しています。ただし、私のコードでは、値をたとえばに設定していることがわかります00000000044そのセルの値と実際のセルがを示すシートの結果0000000004

これがセルに書き込むための私のコードです。

  if (reader[2].ToString().Length < 9)
  {


        myworksheet.Cell(firstrow, 12).Value = reader[2].ToString(); //0045678945

  }
  else
  {
        myworksheet.Cell(firstrow, 12).Value = reader[2].ToString().Substring(0, 9); //0045678945

  }

45678945上で述べたようにExcelシートを開くと、私の値は0045678945

どんな助けでもいただければ幸いです。

4

5 に答える 5

11

必要な結果を得る最も簡単な方法は、セルに入力した値の前にアポストロフィを追加することです。これにより、Excelに文字列であることが通知されます。

Cell.Value= "'" & "000123"

として表示されます000123

これは、物事がどのように機能するかを示すためのコードです(少なくとも、Excel 2010ではどのように機能するか)。

Sub testFormat()
[A1].Value = "000123"
[A2].Value = "'000123"
[A3].Value = "000123"
[A3].NumberFormat = "@"
[A4].Value = "'000123"
[A4].NumberFormat = "@"
End Sub

この結果は次のとおりです。

先行ゼロを使用したフォーマット

ご覧のとおり、先行ゼロを示す3つのセルがあります。

  1. アポストロフィを前にして文字列を入力したセル
  2. "@"(= "text")形式でフォーマットされたセル
  3. アポストロフィとテキスト形式のセル

スプレッドシートにアポストロフィを表示するために何をしたかわかりません...しかし、上記が問題の解決に役立つことを願っています。

于 2013-02-28T19:30:16.583 に答える
1

私が正しく理解している場合:

Excelは先行ゼロのある数値を表示し、OOXMLを介してC#から読み取ると、先行ゼロは表示されません。

Excelが実際の先行ゼロを保存する代わりに、いくつかの書式設定ルールを設定している可能性があります。

それを打ち消すいくつかの方法。頭に浮かぶ「最も安い」ものは次のとおりです。1つ選んでください。

  • Excelで列をテキストとしてフォーマットします
  • C#コードでは、先行ゼロを期待せず、代わりにそれらを追加します
于 2013-02-28T19:19:46.793 に答える
0

Excel内から先行ゼロを切り捨てないようにするには、セルの数値形式をに設定する必要がありますText

于 2013-02-28T19:20:23.570 に答える
0

セルのDataTypeをStringまたはSharedStringのいずれかに設定すると、先行ゼロが保持されると思います。Excelはこれをテキストとして認識し、値を文字どおりに処理し、書式設定ルールを適用しようとはしません。

cell.DataType = new EnumValue<CellValues>( CellValues.SharedString );

またはcell.DataType=new EnumValue(CellValues.String);

于 2013-10-03T14:05:34.630 に答える
0

DataTableを使用している場合は、別のDataTableを取得してから、データテーブル内のセル全体を反復処理し、セルのテキストの前にスペースを追加する必要があります。つまり、「&nbsp」;を使用します。同じテーブルの行を変更することはできません。 「コレクションが変更されました」という例外をスローします。新しいデータテーブルを取得する必要があります。

次のコードを検討してください。

    //To get the result with leading zero's in excel this code is written.
    DataTable dtUpdated=new DataTable();
    //This gives similar schema to the new datatable
    dtUpdated = dtReports.Clone();
        foreach (DataRow row in dtReports.Rows)
        {
            for (int i = 0; i < dtReports.Columns.Count; i++)
            {
                string oldVal = row[i].ToString();
                string newVal = "&nbsp;"+oldVal;
                row[i] = newVal;
            }
            dtUpdated.ImportRow(row); 
        }

この更新されたテーブルをdatagridにバインドして、Excelの変換に役立てることができます。

于 2014-01-16T06:15:12.793 に答える