Primo Chalice Ответов: 1

Как связать файл excel с текстовыми полями в C#?


Привет,


Я хочу импортировать данные из определенных столбцов в файле excel в текстовые поля на языке C#.

Я хочу, чтобы это было сделано вручную. Например, я хочу:

A2 = Текстовое Поле 1
B3 = TextBox2 и так далее....

Здесь я хочу вручную указать имена столбцов для копирования.

Пожалуйста помочь.

С уважением
Аман

Что я уже пробовал:

string filepath = @"C:/Program Files/Test.xlsx";

            var excelApp = new Excel.Application();

            excelApp.Workbooks.Open(filepath);
            Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet;
            workSheet.Cells[2, "A"] = TitleTextBox.Text;
            workSheet.Cells[2, "B"] = PublisherTextBox.Text;
            workSheet.Cells[2, "C"] = FileNameTextBox.Text;
            workSheet.Cells[2, "D"] = IssueTextBox.Text;
            workSheet.Cells[2, "E"] = ReleaseDateTextBox.Text;
            workSheet.Cells[2, "F"] = PageCountTextBox.Text;

Richard MacCutchan

Ваш код копирует данные текстового поля в ячейки рабочего листа, а не наоборот. Но в любом случае, использование текстовых полей для такой проблемы-не лучший вариант. Один из типов сетки данных был бы лучше.

Primo Chalice

А, понятно. К сожалению, мой плохой. Итак, можно ли скопировать данные из Excel в DataGrid, а затем из DataGrid в TextBox?

Richard MacCutchan

Почему вы хотите использовать текстовое поле? Datagrid предоставит вам все необходимое для управления данными Excel (или любого другого типа базы данных).

1 Ответов

Рейтинг:
2

Maciej Los

Самый простой способ-это использовать ADO.NET[^] (Для oledb[^]).
Шаги, которые нужно сделать:
1. Создание Метод oledbconnection[^]
2. Создание Объект oledbcommand[^]
3. Выполнить команду OleDbReader[^]
4. Загрузка данных в объект DataTable[^]
5. привязка данных к DataGridView с помощью Источник данных[^]

string sFileName = @"D:\MyUsers.xlsx"; //change the path to Excel file
string sConStr = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES';", sFileName);


//1.
using (OleDbConnection connection = new OleDbConnection(sConStr))
{
    string sql = "SELECT * FROM [Sheet1$]";
    connection.Open();
    //2.
    OleDbCommand command = new OleDbCommand(sql, connection);

    //3.
    OleDbDataReader reader = command.ExecuteReader();

    //4.
    DataTable dt = new DataTable();
    dt.Load(reader);

    //5.
    this.dataGridView1.DataSource = dt;

    reader.Close();
    reader.Dispose();
    command.Dispose();
}


Для получения более подробной информации, пожалуйста, смотрите:
Как привязать данные к элементу управления Windows Forms DataGridView | Microsoft Docs[^]


Primo Chalice

Я обязательно попробую это сделать и дам вам знать :)

Maciej Los

Вы уже пробовали?

Primo Chalice

Да, но я наконец-то написал код для текстовых полей

Превосходить.Приложение xlApp;
Превосходить.Рабочая тетрадь xlWorkBook;
Превосходить.Рабочий лист xlWorkSheet;
Превосходить.Диапазон диапазон;

инт корпорации;
int cCnt;
int rw = 0;
int cl = 0;

xlApp = новый Excel.Приложение();
xlWorkBook = xlApp.Workbooks.Открыть(@"C:\Test\Text.xlsx");
xlWorkSheet = (Excel.Рабочий лист)xlWorkBook.Worksheets.get_Item(1);

диапазон = xlWorkSheet.UsedRange;
РВ = диапазон.Строк.Рассчитывать;
cl = диапазон.Столбцы.Рассчитывать;

для (ГК "Роснанотех" совместно = 2; корпорации &ЛТ;= РВ; ГК "Роснанотех" совместно++)
{
для (cCnt = 1; cCnt <= cl; cCnt++)
{
TitleTextBox.Text = (string)(диапазон.Ячейки[2, 1] как Excel.Диапазон).Значение2;
PublisherTextBox.Text = (string)(диапазон.Ячейки[2, 2] как Excel.Диапазон).Значение2;
FileNameTextBox.Text = (string)(диапазон.Ячейки[2, 3] как Excel.Диапазон).Значение2;
IssueTextBox.Text = (string)(диапазон.Ячейки[2, 4] как Excel.Диапазон).Значение2;
ReleaseDateTextBox.Text = (string)(диапазон.Ячейки[2, 5] как Excel.Диапазон).Значение2;
PageCountTextBox.Текст = Преобразовать.ToString((диапазон.Ячейки[2, 6] как Excel.Диапазон).Значение2);
}
}

xlWorkBook.Недалеко(правда, нуль, нуль);
xlApp.Бросить();