web-dev-qa-db-ja.com

C#Excel相互運用機能:セルをフォーマットして値をテキストとして保存する方法

DataTableからExcelスプレッドシートに数値を書き込んでいます。数値自体の長さが5桁未満の場合、これらの数値はすべて5桁の長さで、前に0が付きます(たとえば、395は00395として格納されます)。 )。

これらの数値を(C#を使用して)E​​xcelに入力すると、数値として保存され、先行する0が削除されます。数値ではなくテキストとして格納される値を取得するために、C#からセルをフォーマットする方法はありますか?

19
Closeratio

SomeRange.NumberFormat = "@";を実行できます。または、値の前に'を付けてセルに書き込むと、Excelはそれをテキストとして格納された数値として扱い、視覚的な合図を提供します。

25
Alex K.

この回答は、当社のソフトウェアの解決策の大きな問題を解決したばかりで、表示された値を取得する必要がありましたが、新しいシートに設定すると、数値として挿入されていました。簡単な解決策。私はまだ投票することはできませんが、それがどのように終わったかに続いて投票します。

for (int h = 1; h <= 1; h++)
{
    int col = lastColl(sheets);
    for (int r = 1; r <= src.Count; r++)
    {
        sheets.Cells[r, col + 1] = "'"+src.Cells[r, h].Text.ToString().Trim();
    }
}
2
Khamul

//ここで、[1]はテキストを作成する列番号です

ExcelWorksheet.Columns[1].NumberFormat = "@";

//ワークブックのすべてのシートの特定の列をフォーマットする場合は、以下のコードを使用します。わずかな変更を加えて、単一シートのループを削除します。

// Excelファイルが保持されていたパス

string ResultsFilePath = @ "C:\ Users\krakhil\Desktop\TGUW Excel\TEST";

    Excel.Application ExcelApp = new Excel.Application();
    Excel.Workbook ExcelWorkbook = ExcelApp.Workbooks.Open(ResultsFilePath);
    ExcelApp.Visible = true;

    //Looping through all available sheets
    foreach (Excel.Worksheet ExcelWorksheet in ExcelWorkbook.Sheets)
    {                
        //Selecting the worksheet where we want to perform action
        ExcelWorksheet.Select(Type.Missing);
        ExcelWorksheet.Columns[1].NumberFormat = "@";
    }

    //saving Excel file using Interop
    ExcelWorkbook.Save();

    //closing file and releasing resources
    ExcelWorkbook.Close(Type.Missing, Type.Missing, Type.Missing);
    Marshal.FinalReleaseComObject(ExcelWorkbook);
    ExcelApp.Quit();
    Marshal.FinalReleaseComObject(ExcelApp);
0
KR Akhil