С# запись текстовых серийных номеров в виде дат в файле Excel

Я написал синтаксический анализатор, который берет некоторую информацию из листов Excel, используя библиотеку Spire.xls и затем записывает информацию в другой файл Excel.

Я столкнулся со странной проблемой. По какой-то причине программа принимает серийные номера, такие как

03-02281 
03-02282 
03-01975

И записать их в лист Excel как

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

Это происходит только с некоторыми значениями.

Другие, такие как

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

И для справки, таблица, значения которой я добавляю:

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

Спасибо за правки формата моего вопроса и заголовка. Я все еще немного новичок здесь, и я учусь делать это лучше.


person ConnorU    schedule 19.12.2013    source источник
comment
В крайнем случае я добавляю одинарную кавычку перед значением, например: '03-02281 '03-02282 '03-01975, и Excel будет воспринимать значения буквально и не будет пытаться преобразовать их во что-либо другое.   -  person spojam    schedule 20.12.2013
comment
Я отредактировал ваш заголовок. См. Должны ли вопросы включать «теги» в свои заголовки?, если нет единого мнения, не следует.   -  person John Saunders    schedule 20.12.2013
comment
вам может понадобиться опубликовать некоторый код, так как у меня не было проблем с записью этих значений в excel при размещении их в переменных и записи их в ячейку.   -  person Sorceri    schedule 20.12.2013
comment
В прошлый раз, когда я имел дело с этим мусором, мне пришлось реализовать тот же метод, что и @spojam.   -  person NotMe    schedule 20.12.2013
comment
@spojam Я сдался и поддержал твою идею. Я до сих пор точно не знаю, почему это происходит, но, по крайней мере, я пробовал, и кажется, что если я анализирую значения, записанные как «03-02281», начальный апостроф удаляется и не попадает в мою переменную, поэтому он не должен мешать с разбором. Вопрос спрашивает, почему это происходит, поэтому я оставляю его открытым на случай, если кто-нибудь еще может помочь пролить на него свет. Спасибо!   -  person ConnorU    schedule 20.12.2013
comment
проблема связана с методом InsertDataColumn. Все остальное работает нормально, и если я использую библиотеку MS Office Excel, я не могу воспроизвести вашу проблему, которая оставляет spire.xls lib в качестве проблемы.   -  person Sorceri    schedule 20.12.2013
comment
@ConnorU, рад, что это сработало для вас, и, насколько мне известно, в Excel нет возможности отключить попытки преобразования значений в то, что, по его мнению, они представляют, я надеюсь, что ошибаюсь в этом, но я не нахожу ничего обратного. , кто-нибудь ?   -  person spojam    schedule 20.12.2013


Ответы (2)


Причина, по которой некоторые значения не сопоставляются с датами, заключается в том, что они выходят за рамки формата MM-dyyyy. например, нет месяца 30 (30-02281) или дня 0 (03-01975).

Я думаю, что единственное, что вам нужно сделать, это установить формат целевого столбца и ячейки перед установкой его значения через API. Иногда при клонировании столбца или ячейки форматирование по умолчанию устанавливается на «Авто», и Excel пытается быть слишком умным.

Если вы поделитесь частью своего кода, сообщество сможет более точно диагностировать проблему.

person Austin    schedule 19.12.2013
comment
Я попытался установить формат столбца в текст перед добавлением значений, но это не решило проблему. Я отредактировал вопрос и включил свой код сейчас... - person ConnorU; 20.12.2013

Вы должны установить формат столбцов в общий перед установкой значения.

person injurer001    schedule 19.12.2013
comment
Попытался установить текстовый формат, используя предложения, найденные здесь (stackoverflow.com/questions/8265350/), но это не сработало... - person ConnorU; 20.12.2013