C# Excel互操作-如何停止编号(存储为文本)为;“评估”;

C# Excel互操作-如何停止编号(存储为文本)为;“评估”;,c#,excel,com-interop,C#,Excel,Com Interop,我想知道是否有人遇到过以下问题,并且对如何解决它有什么想法:我正在通过Interop将数据从C#应用程序(.NET 3.5)导出到Excel(2003)。其中一列存储一个看似数字的字符串值。也就是说,它是一个以0开头的数字,例如000123 我需要完整的数字来存储,因为它可能是一个序列号或类似的东西。Excel对此不感兴趣,所以我想我可以通过将目标单元格设置为general来绕过它。当我导出到Excel时,我发现存储的是123而不是000123 我在调试中运行了该应用程序,并从观察列表中发现(对

我想知道是否有人遇到过以下问题,并且对如何解决它有什么想法:我正在通过Interop将数据从C#应用程序(.NET 3.5)导出到Excel(2003)。其中一列存储一个看似数字的字符串值。也就是说,它是一个以0开头的数字,例如000123

我需要完整的数字来存储,因为它可能是一个序列号或类似的东西。Excel对此不感兴趣,所以我想我可以通过将目标单元格设置为general来绕过它。当我导出到Excel时,我发现存储的是123而不是000123

我在调试中运行了该应用程序,并从观察列表中发现(对于“范围”:

尽管我在这一点之前设置了numberformat,但它似乎被当作一个数字处理:

range.NumberFormat = sNumberFormat;
range = (Range)sheet.Cells[iExcelRow, iExcelCol];
range.Value2 = this.Rows[iGridRow].Cells[iGridCol].Value.ToString();

有人可以帮忙吗?

在数字前添加一个撇号
。然后Excel会将数字视为字符串。

我使用这个宏。它会在每个单元格中的每个数值前插入一个撇号

Sub Macro1()
    Dim rwIndex As Integer
    Dim colIndex As Integer
    For rwIndex = 1 To ActiveSheet.UsedRange.Rows.Count
            For colIndex = 1 To ActiveSheet.UsedRange.Columns.Count
                If IsNumeric(Cells(rwIndex, colIndex).Value) Then _
                    Cells(rwIndex, colIndex).Value = "'" _
                     & Cells(rwIndex, colIndex).Value
            Next colIndex
    Next rwIndex
End Sub

正确的类型不是常规类型,因为常规类型将尝试猜测正确的类型,在本例中是数字类型,但您必须将其指定为文本,以不截断前导零

请尝试以下代码:

Range cell = ActiveWorksheet.Cells[1,1];
//The @ is the indicator for Excel, that the content should be text
const string textIndicator = "@";
//Change the NumberFormat from 'General' to 'Text'
cell.NumberFormat = textIndicator;
//Set the Value
cell.Value2 = "000123";

我知道已经很晚了,但也许将来有人需要这个。 这并不是为了性能,但你可以先将其存储在二维数组中

object[,] Values = new object[iGrid.Rows.Count, IGrid.Columns.Count];
            for (int i = 0; i < alllogentry.Rows.Count; i++)
            {
                for (int j = 0; j < alllogentry.Columns.Count; j++)
                {
                    if (alllogentry.Rows[i].Cells[j].Value != null)
                    {
                        Values[i, j] = alllogentry.Rows[i].Cells[j].Value.ToString();
                    }
                    else
                    {
                        Values[i, j] = " ";
                    }
                }
            }
谢谢:-)我有点困惑,为什么我可以在文本字段中键入该值,它会工作得很好,但无法通过互操作工作。
object[,] Values = new object[iGrid.Rows.Count, IGrid.Columns.Count];
            for (int i = 0; i < alllogentry.Rows.Count; i++)
            {
                for (int j = 0; j < alllogentry.Columns.Count; j++)
                {
                    if (alllogentry.Rows[i].Cells[j].Value != null)
                    {
                        Values[i, j] = alllogentry.Rows[i].Cells[j].Value.ToString();
                    }
                    else
                    {
                        Values[i, j] = " ";
                    }
                }
            }
// Bulk Transfer
String MaxRow = (alllogentry.Rows.Count+6).ToString();
 String MaxColumn = ((String)(Convert.ToChar(alllogentry.Columns.Count / 26 + 64).ToString() + Convert.ToChar(alllogentry.Columns.Count % 26 + 64))).Replace('@', ' ').Trim();
String MaxCell = MaxColumn + MaxRow;

//Format
worksheet.get_Range("A1", MaxColumn + "1").Font.Bold = true;
worksheet.get_Range("A1", MaxColumn + "1").VerticalAlignment = XlVAlign.xlVAlignCenter;

// Insert Statement
    worksheet.get_Range("A7", MaxCell).Value2 = Values;