Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/34: Рейтинг темы: голосов - 34, средняя оценка - 4.88
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730

Как извлечь данные из Excel не открывая файл?

25.08.2016, 19:42. Показов 7520. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ВОПРОС
Как извлечь данные из Excel не открывая файл?

СЦЕНАРИЙ
1. В поле "ID" вводим значение "ID" (ID - записи восьмизначное число)
2. В поле "СОДЕРЖАНИЕ ЗАПИСИ" появляется запись из базы данных, которое соответсnвует ID.

Прилагаю болванку для кода

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace ExcelDb
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void groupBox2_Enter(object sender, EventArgs e)
        {
 
        }
 
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
 
        }
    }
}


ПРИЛОЖЕНИЕ.
1. Проект
Миниатюры
Как извлечь данные из Excel не открывая файл?  
Вложения
Тип файла: rar проект.RAR (33.1 Кб, 13 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.08.2016, 19:42
Ответы с готовыми решениями:

Как внести данные в книгу Excel, не открывая окно с книгой?
как в приложении VBA открыть для записи и чтения файл Excel, чтобы окно с этим файлом не появлялось на экране?

Возможность получить инфу из листа книги excel ne открывая сам файл excel
Здравствуйтe. Как возможно взять/добавить данныe в опрeдeлeнную книгу, в опр. лист нe открывая сам файл. Макрос пишу на открытой книгe, но...

Builder+Excel - считать данные из книги, не открывая ее
Здравствуйте! Допускаю, что моя идея непонятна и утопична, но все-таки спрошу. Скажите, пожалуйста, возможно ли написать такое приложение...

34
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
27.08.2016, 18:20  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от freeba Посмотреть сообщение
zakaz_77, А, забыл. Удалить событие закрытия формы нужно. Щелкните два раза по ошибке и удалите строчку с красным подчеркиванием.
1. Закоментировал строчку.
2. Нажал "отладка".
3. Появляется ошибка.
Миниатюры
Как извлечь данные из Excel не открывая файл?   Как извлечь данные из Excel не открывая файл?  
0
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
27.08.2016, 22:44
а этот код у вас сработает?

Нужно подключить ссылку на Microsoft Excel 15.0 Object Library в меню Project - Add Reference... - COM (у вас может быть другая версия Excel - 14.0, 12.0 и т.д.)

в этой строке укажите свой путь к файлу
string fileName = "G:\\C#\\ExcelFile.xlsx"; //имя Excel файла

в этой строке укажите имя листа в файле Excel
Excel.Worksheet xlSht = xlWb.Sheets["Лист1"]; //имя листа в файле

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
 
namespace WindowsFormsApplication1
{   
    public partial class Form1 : Form
    {
        object[,] arrData; //объявляем двумерный массив (строки и столбцы)
        public Form1()        
        {            
            InitializeComponent();
        }       
        private void Form1_Load(object sender, EventArgs e)
        {
           
            string fileName = "G:\\C#\\ExcelFile.xlsx"; //имя Excel файла  
            Excel.Application xlApp = new Excel.Application();
            Excel.Workbook xlWb = xlApp.Workbooks.Open(fileName); //открываем Excel файл
            Excel.Worksheet xlSht = xlWb.Sheets["Лист1"]; //имя листа в файле      
            int iLastRow = xlSht.Cells[xlSht.Rows.Count, "A"].End[Excel.XlDirection.xlUp].Row;  //последняя заполненная строка в столбце А
            //var arrData = (object[,])xlSht.Range["A2:B" + iLastRow].Value; //берём данные со 2-й строки, если нужно с 1-й, то замените A2 на A1
            arrData = (object[,])xlSht.Range["A2:B" + iLastRow].Value; //берём данные со 2-й строки, если нужно с 1-й, то замените A2 на A1
            xlWb.Close(true);//закрываем файл и сохраняем изменения, если не сохранять, то false                
            xlApp.Quit(); //закрываем Excel
            for (int i = 1; i <= arrData.GetUpperBound(0); i++) //заполняем ComboBox данными из массива
            {
                this.comboBox1.Items.Add(arrData[i,1]);
            }
        }
 
        private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
        {
            for (int i = 1; i <= arrData.GetUpperBound(0); i++)
            {
                if (this.comboBox1.Text == arrData[i, 1].ToString())
                {
                    this.textBox1.Text = arrData[i, 2].ToString();
                    return;
                }
            }
        }
 
        private void comboBox1_KeyUp(object sender, KeyEventArgs e)
        {
            if (this.comboBox1.Text == "")
            {
                this.textBox1.Text = "";
                return;
            }
 
            for (int i = 1; i <= arrData.GetUpperBound(0); i++)
            {
                if (this.comboBox1.Text == arrData[i, 1].ToString())
                {
                    this.textBox1.Text = arrData[i, 2].ToString();
                    return;
                }
            }
        }  
    }
}
1
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
28.08.2016, 03:59
Цитата Сообщение от Pavel55 Посмотреть сообщение
а этот код у вас сработает?
Нужно подключить ссылку на Microsoft Excel 15.0 Object Library в меню Project - Add Reference... - COM (у вас может быть другая версия Excel - 14.0, 12.0 и т.д.)
Код использует позднее связывание, ему абсолютно пофиг на версию офиса и ничего подключать не нужно))

Цитата Сообщение от zakaz_77 Посмотреть сообщение
3. Появляется ошибка.
не должно быть такого, попробуйте эту версию и убедитесь, что книга из которой читаем лежит рядом с exe'шником. Если будет повторятся - создайте новую книгу руками и положите рядом с exe.
Вложения
Тип файла: zip SampleExportExcel (1).zip (121.8 Кб, 4 просмотров)
1
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
28.08.2016, 15:42  [ТС]
По топику #22
Цитата Сообщение от Pavel55 Посмотреть сообщение
а этот код у вас сработает?
Вопрос по строчке
C#
1
private void comboBox1_KeyUp(object sender, KeyEventArgs e)
Как в "панели элементов" называется "comboBox1_KeyUp(object sender, KeyEventArgs e)"?
Не могу найти. Если, не сложно, то пришлите скриншот этого элемента в "панели элементов" или какое название ввести в "поиск" по "панели элементов".


По топику #23
Цитата Сообщение от freeba Посмотреть сообщение
создайте новую книгу руками и положите рядом с exe.
Так и сделал. Заработало.

ВОПРОС.
1. Если вам не трудно, опишите в двух словах функционал этого проекта.
А то уже голова кругом идёт: "методы", "классы".
За что отвечает "ExportExcel"?
За что отвечает "SampleFind" (хотя понимаю, но более конкретно)?
2. Из чего состоят сборки (или как -это называется) "ExportExcel", "SampleFind"?
Т.е. опишите структуру кода: классы, объекты.. Не уверен в правильности последовательности...
0
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
28.08.2016, 16:01
Цитата Сообщение от zakaz_77 Посмотреть сообщение
Вопрос по строчке
KeyUp - это событие поднятие клавиши пользователем.
Когда человек нажимает на любую кнопку на клавиатуре происходят 2 события:
а) нажатие клавиши
б) поднятие клавиши

вам нужно выделить мышкой на вашей форме comboBox1 (просто щёлкнуть на него)
Перейти в окно Свойств, вверху в этом окошке щёлкнуть мышкой на значке молнии (вы перейдёте в окно событий comboBox1), найти в списке событий KeyUp и щёлкнуть по нему 2 раза мышкой - и сразу у вас в коде создаться обработчик событий
private void comboBox1_KeyUp(object sender, KeyEventArgs e)

см. принтсрин внизу этого сообщения


А ещё я вам предложу вот такой вариант. Он намного проще кода предложенного freeba

у вас на форме должны быть 2 textBox и 1 кнопка

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Windows.Forms;
using System.Collections.Generic;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        DataTable dt = new DataTable();
 
        public Form1()
        {
            InitializeComponent();            
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            string filePath  = @"G:\C#\ExcelFile.xlsx";
            string strConn;
            bool hasHeaders = true; //брать залоговок таблицы или нет (true, false)
            string HDR = hasHeaders ? "Yes" : "No";
            if (filePath.Substring(filePath.LastIndexOf('.')).ToLower() == ".xlsx")
                strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties="Excel 12.0;HDR=" + HDR + ";IMEX=0"";
            else
                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties="Excel 8.0;HDR=" + HDR + ";IMEX=0"";
            OleDbConnection cnn = new OleDbConnection(strConn);
            OleDbCommand oConn = new OleDbCommand("select * from [Лист1$]", cnn); //название листа в файле Excel
            cnn.Open();
            OleDbDataAdapter adapter = new OleDbDataAdapter(oConn);
            adapter.Fill(dt);
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == string.Empty)
                return;
 
            string expression = textBox1.Text;
            DataRow[] foundRows;            
            foundRows = dt.Select("ID =" + expression);            
            for (int i = 0; i < foundRows.Length; i++)
            {
                textBox2.Text = foundRows[i][1].ToString();
            }
        }       
    }    
}
Миниатюры
Как извлечь данные из Excel не открывая файл?  
1
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
28.08.2016, 16:05
Цитата Сообщение от zakaz_77 Посмотреть сообщение
1. Если вам не трудно, опишите в двух словах функционал этого проекта.
А то уже голова кругом идёт: "методы", "классы".
За что отвечает "ExportExcel"?
За что отвечает "SampleFind" (хотя понимаю, но более конкретно)?
2. Из чего состоят сборки (или как -это называется) "ExportExcel", "SampleFind"?
Т.е. опишите структуру кода: классы, объекты.. Не уверен в правильности последовательности...
Это фундаментальные понятия в шарпе - почитайте лучше учебник. Если кратко - программа на шарпе представляет из себя решение (Solution) состоящее из проектов (Project). Проекты могут быть компилируемыми - из них собираются сборки и вспомогательные, например, проекты моделирования. Сборка (Assemblies), в шарпе, это инкапсулированный кусок IL кода. В сборки компилируются все не вспомогательные проекты, т.е. и библиотеки и исполняемые файлы - это все сборки.

В данном конкретном случае решение состоит из двух проектов, один (ExportExcel) это библиотека классов, а второй непосредственно исполняемый файл, который ссылается на эту библиотеку.
1
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
28.08.2016, 16:09
del
1
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
28.08.2016, 16:21
Pavel55, вы учите плохому. Мало того что OleDb устарела, она еще и чудовищно медленно работает. Попробуйте сделать выборку хотя-бы из 3-4к строк)) К тому же жесткая привязка к какой то одной версии COM компонента, это такое себе решение...
1
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
28.08.2016, 16:34
freeba, да, возможно вы правы, но я не уверен, что TC разберётся с вашим кодом.

P.S. Вы знаете, я сейчас увеличил данные в Excel до 10.000 строк (ID и Текст) и у меня всё быстро работает

Добавлено через 9 минут
P.P.S. я сейчас ещё увеличил данные до 100.000 строк в Excel и тоже всё быстро работает. Вот с 1млн строк уже труба
1
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
28.08.2016, 17:50  [ТС]
Цитата Сообщение от Pavel55 Посмотреть сообщение
А ещё я вам предложу вот такой вариант
Pavel55, пока попробую вариант топик #22

По топику #22
Цитата Сообщение от Pavel55 Посмотреть сообщение
у вас может быть другая версия Excel - 14.0, 12.0 и т.д.
У меня Ескель 2016.

Цитата Сообщение от Pavel55 Посмотреть сообщение
Нужно подключить ссылку на Microsoft Excel 15.0 Object Library в меню Project - Add Reference... - COM
Не нахожу предмет подключения. Или что-то не так делаю?
скрин https://yadi.sk/i/No1-IWPruYVjH

Добавлено через 25 минут
Pavel55, может не сложно выложить проекты #22 и #25 целиком, а то как не пробую выдаёт ошибки.
0
28.08.2016, 17:51

Не по теме:

Цитата Сообщение от Pavel55 Посмотреть сообщение
freeba, да, возможно вы правы, но я не уверен, что TC разберётся с вашим кодом.
P.S. Вы знаете, я сейчас увеличил данные в Excel до 10.000 строк (ID и Текст) и у меня всё быстро работает
Добавлено через 9 минут
P.P.S. я сейчас ещё увеличил данные до 100.000 строк в Excel и тоже всё быстро работает. Вот с 1млн строк уже труба
Я говорил не про выборку - она в памяти идет и к экселю отношения не имеет. Я про перенос данных из таблицы в память. Расскажите сколько минут у вас 100к строк переносятся в DataTable)))

0
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
28.08.2016, 17:51
Ищите на букву М (от слова Microsoft), а потом среде Microsoft ищите Excel
Миниатюры
Как извлечь данные из Excel не открывая файл?  
1
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
28.08.2016, 17:52
Цитата Сообщение от freeba Посмотреть сообщение
Расскажите сколько минут у вас 100к строк переносятся в DataTable)))
этот процесс у меня стоит в Form_load и занимает 1-2 сек. Т.е форма появляется почти мгновенно
0
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
28.08.2016, 22:15  [ТС]
Топик #22
Вроде одолел... Открылось, работает...
Как раз для меня погуляться в песочнице.. Попробую в боевых условиях...

ВОПРОС
1. У меня есть код со следующей строчкой
Browser.Navigate().GoToUrl("http://google.com");
Как сделать, чтобы код описанный в данной теме значение подставлял не "textBox1", а код вместо "http://google.com"?
Т.е. будет Ексель файл с ссылками, которые будут извлекаться из Ексель файла и вставляться в код.
0
9 / 9 / 4
Регистрация: 23.12.2015
Сообщений: 730
30.08.2016, 08:46  [ТС]
Уточняю вопрос

ВОПРОС
1. У меня есть код со следующей строчкой
Browser.Navigate().GoToUrl("http://google.com");
Как сделать, чтобы код описанный в данной теме, подставлял значение не в "textBox1", а в код вместо "http://google.com"?
Т.е. будет Ексель файл с ссылками, которые будут извлекаться из Ексель файла и вставляться в код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.08.2016, 08:46

Как извлечь данные из Excel в datagridview по двум характеристикам?
ИМЕЕТСЯ БД в Ексель ВОПРОС Извлечь из Ексель данные по двум параметрам по в три datagridview СЦЕНАРИЙ 1. Вносим...

Как извлечь данные из файла Excel, который находится на сайте?
День добрый. Хотел бы узнать, как извлечь данные из файла excel, который находится на сайте? И возможно ли это сделать при помощи...

Сохранение в Excel не открывая сам файл
private void excel_init(string write, int page) { try { ...

Excel: как извлечь данные из файла персональной панели инструментов xlb
Есть программа, написанная в Excel. Есть файл пользовательской панели (excel.xlb), где добавлены дополнительные кнопки и пункты меню,...

Можно ли записать в файл .xls данные не открывая его?
Можно ли записать в файл .xls данные не открывая и не загружая его? Если можно, то подскажите как.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru