манипулировать данными перед импортом из Excel в набор данных - PullRequest
0 голосов
/ 11 августа 2010

У меня есть несколько столбцов данных в таблице 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, но, думаю, это не поможет, поскольку это происходит после импорта данных. Это правильно?

Можно ли манипулировать данными, чтобы импортировать правильные данные? Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 24 августа 2010

Я использовал библиотеку с открытым исходным кодом 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
}
0 голосов
/ 02 декабря 2010

Я только что получил подобную проблему (найдите ее здесь: Причудливый 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"";";  

Переключение двигателя с JET на ACE сделало это для меня.

...