Хобрук: Ваш путь к мастерству в программировании

Импорт Excel в Datagrid

Я пытаюсь добавить файл Excel в свою программу, чтобы работать с данными и экспортировать их. Я использую OleDB для доступа к файлу доступа и пытаюсь передать его в таблицу данных, чтобы я мог просматривать его и работать с ним в winform. Вот код, который я использую:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Windows;
using System.Windows.Forms;
using System.Globalization;
using System.Runtime.Versioning;
using System.Threading;

namespace DataImportServices
{
    public class ExcelImport : IDataImport
    {
        public DataTable ImportData(OpenFileDialog openFile)
        {
            var dataTable = new DataTable();

            string query;
            var hasHeaders = false;
            var HDR = hasHeaders ? "Yes" : "No";
            string connectionString;

            if (openFile.FileName.Substring(openFile.FileName.LastIndexOf(".")).ToLower() == ".xlsx")
            {
                connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + openFile.FileName + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=0\"";
            }
            else
            {
                connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + openFile.FileName + ";Extended Properties=\"Excel 8.0;HDR=" + HDR + ";IMEX=0\"";
            }

            using (OleDbConnection cn = new OleDbConnection(connectionString))
            {
                cn.Open();
                DataTable schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                DataRow schemaRow = schemaTable.Rows[0];
                string sheet = schemaRow["TABLE_NAME"].ToString();

                if (!sheet.EndsWith("_"))
                {
                    query = "SELECT * FROM [" + openFile.FileName + "]";
                    using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, cn))
                    {
                         dataTable.Locale = CultureInfo.CurrentCulture;
                         dataAdapter.Fill(dataTable); //The error occurs here with a "" is not an acceptable. If I put a name ie "Data" it says its not an adorecord.
                    }
                }                
            }
            return (dataTable);
        }
    }
}

Ошибка, которую я получаю, возникает, когда я пытаюсь заполнить таблицу данных с помощью OleDBAdapter (dataAdapter). Он выдает исключение, запрашивающее набор записей ADODB, несмотря на переопределение только для DataTable. Как я могу обойти это? Или я что-то упускаю?

Заранее спасибо.


Ответы:


1

Вы можете использовать библиотеку, например EpPlus. Эта поддержка excel нативная без использования ole или excel.

Вы можете загрузить свои данные в виде массива и получить к ним прямой доступ.

http://epplus.codeplex.com/wikipage?title=LinqExample

07.11.2017

2

Вы можете попробовать читать содержимое Excel с помощью Exportable. Это крошечная библиотека, которую я разработал некоторое время назад и теперь распространяется на Nuget как OpenSource.

По сути, вы можете прочитать файл Excel следующим образом:

IImportEngine engine = new ExcelImportEngine();
var key = engine.AddContainer<DummyPersonWithAttributes>();
engine.SetDocument(pathToFile); //or MemoryStream instance
var data = engine.GetList<DummyPersonWithAttributes>(key);

Вы можете получить дополнительную информацию о здесь

08.11.2017
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..