У меня есть рабочий лист Excel, который я хочу прочитать в таблицу данных - все хорошо за исключением одного конкретного столбца в моем листе Excel. Столбец, 'ProductID', является соединением значений как ##########
и n#########
.
Я пытался позволить OleDB обработать все отдельно автоматически путем чтения его в набор данных/таблицу данных, но любые значения в 'ProductID' как n######
отсутствуют, проигнорированный и оставленный незаполненный. Я пытался вручную создать свой DataTable цикличным выполнением через каждую строку с datareader, но с теми же самыми результатами.
Вот код:
// add the column names manually to the datatable as column_1, column_2, ...
for (colnum = 0; colnum < num_columns; colnum ++){
ds.Tables["products"].Columns.Add("column_" +colnum , System.Type.GetType("System.String"));
}
while(myDataReader.Read()){
// loop through each excel row adding a new respective datarow to my datatable
DataRow a_row = ds.Tables["products"].NewRow();
for (col = 0; col < num_columns; col ++){
try { a_row[col] = rdr.GetString(col); }
catch { a_row[col] = rdr.GetValue(col).ToString(); }
}
ds.Tables["products"].Rows.Add(a_row);
}
Я не понимаю, почему это не позволит мне читать в значениях как n######
. Как я могу сделать это?
Есть два способа обработки смешанных типов данных и Excel.
Метод 1
Метод 2
Существует «взлом», который заключается в добавлении «IMEX = 1» в строку подключения следующим образом:
Provider = Microsoft.Jet.OLEDB.4.0; Data Source = myfile.xls; Extended Properties = Excel 8.0; IMEX = 1
Это будет пытаться обрабатывать смешанные форматы Excel в соответствии с тем, как они установлены в вашем реестре. Вы можете установить это локально, но для сервера это, вероятно, не вариант.