Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将文本序列号作为日期写入Excel文件_C#_Excel_Excel Interop - Fatal编程技术网

C#将文本序列号作为日期写入Excel文件

C#将文本序列号作为日期写入Excel文件,c#,excel,excel-interop,C#,Excel,Excel Interop,我编写了一个解析器,它使用从Excel工作表中获取一些信息,然后将这些信息写入另一个Excel文件 我遇到了一个奇怪的问题。出于某种原因,该程序使用序列号,例如 03-02281 03-02282 03-01975 30-04761 03-00613 03-00614 并将其写入Excel表格,如下所示: 3/1/2281 3/1/2282 3/1/1975 这只发生在某些值上 其他如 03-02281 03-02282 03-01975 30-04761 03-00613 03

我编写了一个解析器,它使用从Excel工作表中获取一些信息,然后将这些信息写入另一个Excel文件

我遇到了一个奇怪的问题。出于某种原因,该程序使用序列号,例如

03-02281 
03-02282 
03-01975
30-04761
03-00613
03-00614
并将其写入Excel表格,如下所示:

3/1/2281
3/1/2282
3/1/1975
这只发生在某些值上

其他如

03-02281 
03-02282 
03-01975
30-04761
03-00613
03-00614
它们的转录没有改变

我检查了excel文件,字段设置为
text
格式。因此,它们最初是以这种方式存储的,或者Excel将序列号解释为日期。另一种可能性是,如果我手动键入正确的值,则原始文件中不会出现这种情况,并且文本不会自动更正/更改

有人知道为什么会发生这种情况吗?我如何告诉Excel只将这些内容视为文本而不是其他内容

我想在每个值的开头添加一个
,但是这些值必须由其他解析器读取,所以这不是最方便的选择

编辑: 这是我用来做这件事的一些代码,希望它能让你们知道我错在哪里

这是添加所有值的代码:

Workbook workbook = new Workbook();
        workbook.LoadFromFile(templateExcelFileUri);
        Worksheet sheet = workbook.Worksheets[0];

        int ColumnIndex = 0; //for the datatable columns iteration
        int columnCounter = 1; //for the excel sheet columns iteration
        int ColumnsToAdd = 6; //(Seccion, seccion desc, marca, marca desc, **IdArticulo**, articulo desc)

        //get the data of the new column
        DataColumn DescriptionsDataColumn;
        //First, add the suggestions.
        for (; ColumnIndex < ColumnsToAdd; ColumnIndex++,
            columnCounter++)
        {
            sheet.InsertColumn(columnCounter);
            if(columnCounter==5)
            sheet.Columns[5].NumberFormat = "@";// the column with the serial numbers.
            DescriptionsDataColumn = AutomatController.DescriptionsTable.Columns[ColumnIndex];
            //insert the data into the new column
            sheet.InsertDataColumn(DescriptionsDataColumn, true, 2, columnCounter);
        }

感谢您对我的问题和标题的格式进行编辑。我在这里还是一个新手,我正在学习如何做得更好。

有些值不映射到日期的原因是因为它们不属于MM-dyyy格式。例如,没有第30个月(30-02281)或第0天(03-01975)

我认为您唯一需要做的就是在通过API设置目标列和单元格的值之前设置其格式。有时克隆列或单元格时,默认格式设置为“自动”,而Excel则试图太聪明


如果您可以共享一点代码,社区可能能够更准确地诊断问题。

在设置值之前,您应该将列格式设置为“常规”。

作为最后手段,我在值之前添加一个引号,如下所示:'03-02281'03-02282'03-01975,Excel会逐字逐句地处理这些值,而不会试图将它们转换为任何其他内容。我已经编辑了您的标题。请参阅“”,其中的共识是“不,他们不应该”。您可能需要发布一些代码,因为我在将这些值放入变量并写入单元格时,将它们写入excel中没有任何问题。@spojam我屈服了,同意了您的想法。我仍然不知道发生这种情况的确切原因,但至少我尝试过,如果我解析写为“'03-02281”的值,那么初始撇号将被删除,并且不会出现在我的变量中,因此它不应该干扰解析。问题是为什么会发生这种情况,所以我把它放在一边,以防其他人能帮我弄清楚。谢谢问题在于InsertDataColumn方法。其他一切都可以正常工作,如果我使用MS office Excel库,我无法重现您的问题,将spire.xls lib保留为问题。尝试使用此处找到的建议()将格式设置为文本,但无效…我尝试在添加值之前将列的格式设置为文本,但没有解决问题。我现在编辑了问题并加入了我的代码。。。