Чтение Excel-файла с использованием Oledb - обработка содержимого файла Excel только как текста - PullRequest
2 голосов
/ 22 февраля 2012

Я использую C # и OleDb для чтения данных из файла Excel 2007.

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

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

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

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, и я использую автоматически созданные столбцы.

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

С уважением, Приянк

Ответы [ 3 ]

5 голосов
/ 23 февраля 2012

Не могли бы вы попробовать строку подключения 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 голосов
/ 08 мая 2013

У меня была похожая проблема. Я решил ее, разделив строку подключения, как указано в следующей строке. Обратите внимание, что после расширенных свойств .. есть (символ) 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;
0 голосов
/ 28 января 2013

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

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

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

     IMEX=1;HDR=NO;

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

     TypeGuessRows=0;ImportMixedTypes=Text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...