Манипулировать данные перед импортом из Excel в DataSet
-
27-09-2019 - |
Вопрос
У меня есть пара столбцов данных в листе Excel, которую я должен импортировать в мое приложение.
Я делаю это, используя -
string strConn;
OleDbDataAdapter oledaExcelInfo;
strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + Server.MapPath(strSavePath + strRepFileName) + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1\"";
oledaExcelInfo = new OleDbDataAdapter("SELECT * FROM [Book1]", strConn);
dsetExcelInfo = new DataSet();
oledaExcelInfo.Fill(dsetExcelInfo, "CCInfo");
Хотя этот импортирует данные успешно, иногда данные импортируются неправильно, то есть иногда число 1234567
может быть импортирован как 1.23E+06
Это может быть решено, если данные в файле Excel '1234567
вместо 1234567
(Добавьте одну кавычку)
Сейчас я пытаюсь манипулировать данными, которые я принесу от Excel, чтобы до того, как я импортирую данные, которые я могу программно добавить '
ко всем значениям, чтобы предотвратить неправильный импорт.
Я даже попробовал использовать oledbdataadapter.update, но я думаю, что это не поможет так, как это происходит после импортируемых данных. Это правильно?
Могу ли я манипулировать данными, чтобы я импортирую правильные данные? Как мне это сделать?
Решение
Я использовал открытый источник NPOI Библиотека Чтобы импортировать данные из Excel и сохранить формат данных, как это было в распределенном листе, т.е. 1234567
будет импортирован как 1234567
Вместо импортирования данных в другом формате, как 1.23E+06
Вместо импортирования данных, как показано на вопрос выше, я импортирую данные с использованием библиотеки NPOI -
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
HSSFWorkbook hssfworkbook;
using (FileStream file = new FileStream(Server.MapPath(strSavePath + strRepFileName), FileMode.Open, FileAccess.Read))
{
hssfworkbook = new HSSFWorkbook(file);
}
Sheet sheet = hssfworkbook.GetSheet("Book1");
DataTable dt = new DataTable(); //Create datatable
dt.Columns.Add(); //Add data columns
for (int count = 0; count <= sheet.LastRowNum; count++)
{
DataRow dr = dt.NewRow(); //Create new data row
//Based on the type of data being imported - get cell value accordingly
dr[0] = sheet.GetRow(count).GetCell(0).StringCellValue;
//dr[0] = sheet.GetRow(count).GetCell(0).NumericCellValue;
//dr[0] = sheet.GetRow(count).GetCell(0).RichStringCellValue;
//dr[0] = sheet.GetRow(count).GetCell(0).DateCellValue;
//dr[0] = sheet.GetRow(count).GetCell(0).BooleanCellValue;
dt.Rows.Add(dr); //Add row to datatable
}
Другие советы
Я только что получил подобную проблему (найди это здесь: Quirky Select из файла Excel через метод OLEDBDATAADAPTER (C #) ).
Попробуйте со следующей строкой подключения, если вы хотите использовать просто .NET Framework без внешних библиотек:
string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";";
Переключение двигателя от самолета до ACE сделал это для меня.