2012-02-22 2 views
2

Я использую C# и OleDb для чтения данных из файла Excel 2007.Чтение Excel-файла с использованием Oledb - обработка содержимого файла excel только для текста

Строка соединения я использую:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1"; 

Ниже приводится код для чтения первенствовать:

private OleDbConnection con = null; 
private OleDbCommand cmd = null; 
private OleDbDataReader dr = null; 
private OleDbDataAdapter adap = null; 
private DataTable dt = null; 
private DataSet ds = null; 
private string query; 
private string conStr; 

public MainWindow() 
{ 
    this.InitializeComponent(); 
    this.query = "SELECT * FROM [Sheet1$]"; 
    this.conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\301591\\Desktop\\Fame.xlsx;Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text\""; 
} 

private void btnImport_Click(object sender, RoutedEventArgs e) 
{ 
    this.ImportingDataSetWay(); 
} 

private void ImportingDataSetWay() 
{ 
    con = new OleDbConnection(conStr); 
    cmd = new OleDbCommand(query, con); 
    adap = new OleDbDataAdapter(cmd); 
    ds = new DataSet(); 
    adap.Fill(ds); 
    this.grImport.ItemsSource = ds.Tables[0].DefaultView; 
} 

Здесь grImport мой WPF Data-Grid и я использую автоматически генерируемые столбцы.

Как я могу убедиться, что содержимое, хранящееся в Excel, всегда будет считаться строкой. Мне не разрешено изменять значения реестра для достижения этого. Есть ли лучший способ прочитать excel. Пожалуйста, направляйте меня. Если вам нужна какая-либо другая информация, дайте мне знать.

С уважением, Priyank

+0

В вашем файле excel есть строка заголовка? –

+0

Да У меня есть головной ряд –

ответ

5

Не могли бы вы попробовать OLEDB строка подключения поставщика, как следовать.

HDR = NO означает, что oledb будет считывать все строки как данные [NO HEADER]. Так как ваши столбцы заголовка - это весь текст, он обрабатывает все данные строки во всех столбцах как текст. После заполнения данных в DataSet вам нужно удалить первую строку, поскольку это не данные.

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties=\"Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\""; 
+0

Спасибо за предложение. Он по-прежнему работает для меня :(:(Я обновил код, о котором идет речь выше. Можете ли вы просмотреть его и сообщить, правильно это или нет? –

+0

HDR = ДА shoud be HDR = НЕТ и удалите первый ряд DataTable в DataSet –

+0

Оки :) :) Я попробую и дам вам знать. Еще раз спасибо. –

0

Одно исправление, которое мы обнаружили, заключается в обеспечении того, чтобы первая строка содержала заголовок. т. Е. Убедитесь, что имена столбцов указаны в первой строке. Если это возможно.

Тогда в вашем коде вы должны программно игнорировать первую строку, тогда как в то же время обмениваете имена столбцов с нее, если нужно.

Используйте это в своей строке подключения.

 IMEX=1;HDR=NO; 

Я не уверен в этом

 TypeGuessRows=0;ImportMixedTypes=Text 
0

У меня был подобный вопрос .. я разрешил его путем разделения ConnectionString, как указано в следующей строке. Обратите внимание, что после расширенных свойств .. есть (char) 34, чтобы окружать IMEX = 1 дополнение к строке. без окружающего с (char) 34, он даст ошибку «не может найти ISAM». Надеюсь, что это решает вашу проблему для провайдера ACE также

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + 
         "Data Source=" + Server.MapPath("UploadedExcel/" + FileName + ".xls") + 
         ";Extended Properties=" + 
         (char)34 + "Excel 8.0;IMEX=1;" + (char)34; 
Смежные вопросы