C # écrivant des numéros de série de text comme dates dans le file Excel

J'ai écrit un parsingur qui prend des informations à partir de feuilles Excel à l'aide de la bibliothèque Spire.xls puis écrit les informations dans un autre file Excel.

Je me heurte à un problème étrange. Pour une raison quelconque, le programme prend des numéros de série tels que

03-02281 03-02282 03-01975 

Et les écrire dans la feuille Excel comme

 3/1/2281 3/1/2282 3/1/1975 

Cela n'arrive qu'avec certaines valeurs.

D'autres, comme

 30-04761 03-00613 03-00614 

sont transcrits inchangés.

J'ai vérifié le file excel, les champs sont définis comme format de text . Donc, ils ont été stockés de cette manière à l'origine ou Excel interprète les numéros de série comme des dates. Une autre possibilité est que cela n'arrive pas dans le file d'origine et que le text n'est pas corrigé / modifié automatiquement si je tape manuellement les valeurs correctes.

Est-ce que quelqu'un sait pourquoi cela se passe et comment je peux dire à Excel de traiter ces documents comme des texts et rien d'autre?

Je voulais append un ' à eux au début de chaque valeur, mais ceux-ci doivent ensuite être lus par d'autres parsingurs, donc ce n'est pas l'option la plus commode.

Edit: Voici quelques-uns des codes que j'utilise pour cela, j'espère qu'il peut vous donner une idée de ce que je vais mal.

C'est le code qui ajoute toutes les valeurs:

 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); } { 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); } 

Et pour les references, le tableau dont j'ajoute les valeurs:

 public static void SetDescriptionsTable() { DescriptionsTable.Columns.Add("Seccion", typeof(ssortingng)); DescriptionsTable.Columns.Add("SeccionDescripcion", typeof(ssortingng)); DescriptionsTable.Columns.Add("Marca", typeof(ssortingng)); DescriptionsTable.Columns.Add("MarcaDescripcion", typeof(ssortingng)); DescriptionsTable.Columns.Add("IdArticulo", typeof(ssortingng)); //Serial numbers DescriptionsTable.Columns.Add("ArticuloDescripcion", typeof(ssortingng)); } { public static void SetDescriptionsTable() { DescriptionsTable.Columns.Add("Seccion", typeof(ssortingng)); DescriptionsTable.Columns.Add("SeccionDescripcion", typeof(ssortingng)); DescriptionsTable.Columns.Add("Marca", typeof(ssortingng)); DescriptionsTable.Columns.Add("MarcaDescripcion", typeof(ssortingng)); DescriptionsTable.Columns.Add("IdArticulo", typeof(ssortingng)); //Serial numbers DescriptionsTable.Columns.Add("ArticuloDescripcion", typeof(ssortingng)); } 

Merci pour les modifications apscopes au format de ma question et du titre. Je suis encore un peu nouveau ici et j'apprends à faire mieux.

La raison pour laquelle certaines valeurs ne correspondent pas aux dates est parce qu'elles tombent en dehors du format format MM-dyyyy. Par exemple, il n'y a pas de mois 30 (30-02281) ou le jour 0 (03-01975).

Je pense que la seule chose que vous devez faire est de définir le format de la colonne cible et de la cellule avant de définir sa valeur via l'API. Parfois, le clonage d'une colonne ou d'une cellule défaire le formatting à "Auto" et Excel tente d'être trop intelligent.

Si vous pouvez partager un peu de votre code, la communauté pourrait diagnostiquer plus précisément le problème.

Vous devez définir le format des colonnes en général avant de définir la valeur.