Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5

Экспорт в массив из Exel

23.05.2012, 18:52. Показов 5552. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Возник соответственно описанный в топике вопрос. Все что нагуглил относится к SQL-запросам, а к экспорту из локально расположенного xls файла ничего нету. Вопрос простой: как считать в массив данные из файла?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.05.2012, 18:52
Ответы с готовыми решениями:

Экспорт из Exel
Вот взял готовый код, подставил в него свои данные: Процедура ПриОткрытии() Значение1=99; обЭксел =...

Экспорт запроса в Exel
Форумчане, подскажите как вставить данные запроса в шаблон Exel? Требуется в шаблоне заполнить столбцы 6,7 и 8 данными из столбцов...

Экспорт из WPF в EXEL
Здравствуйте! Есть вопросик... По нажатию кнопочки из разных полей на форме данные заносятся в переменные, как мне эти данные записать в...

19
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
23.05.2012, 19:57
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
using System;
using System.Collections.Generic;
using System.Data.OleDb;
 
class Program
{
    static void Main(string[] args)
    {
        OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\\1.xlsx;Extended Properties=\"Excel 12.0 Xml;HDR=NO\";");
        connection.Open();
        OleDbCommand command = new OleDbCommand("SELECT * FROM [Лист1$]", connection);
        OleDbDataReader reader = command.ExecuteReader();
        List<List<int>> list = new List<List<int>>();
        while (reader.Read())
        {
            List<int> buf = new List<int>();
            for (int i = 0; i < reader.FieldCount; i++)
                buf.Add(int.Parse(reader[i].ToString()));
            list.Add(buf);
        }
        connection.Dispose();
        for (int i = 0; i < list.Count; i++)
            Console.WriteLine(string.Join(", ", list[i]));
        Console.ReadKey(true);
    }
}
3
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
23.05.2012, 20:31  [ТС]
Петррр, я же как раз-таки сказал, что SQL-запросы есть, а просто считать локально расположенный файл я не нашел как. При чем тут oleDB?
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
23.05.2012, 21:04
А у меня файл не локальный?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
23.05.2012, 22:23  [ТС]
Петррр, просто в Delphi это все делалось гораздо проще, я думал тут тоже примерно также. Ясно, спасибо.
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
23.05.2012, 22:38
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using Excel = Microsoft.Office.Interop.Excel;
 
class Program
{
    static void Main(string[] args)
    {
        Excel.Application app = new Excel.Application();
        app.Workbooks.Open("E:\\1.xlsx");
        Excel.Worksheet sheet = app.ActiveSheet;
        int[,] matrix = new int[2, 3];
        for (int i = 0; i < matrix.GetLength(0); i++)
            for (int j = 0; j < matrix.GetLength(1); j++)
                matrix[i, j] = (int)((sheet.Cells[i + 1, j + 1] as Excel.Range).Value);
        app.Quit();
        for (int i = 0; i < matrix.GetLength(0); i++)
        {
            for (int j = 0; j < matrix.GetLength(1); j++)
                Console.Write("{0, 3}", matrix[i, j]);
            Console.WriteLine();
        }
    }
}
2
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
23.05.2012, 23:54  [ТС]
То, что надо)
0
9 / 9 / 4
Регистрация: 25.09.2011
Сообщений: 23
24.05.2012, 14:38
Psilon, Вы считаете, что запуск Excel будет работать быстрее?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.05.2012, 00:26  [ТС]
Corshun, мне нужно просто считать матрицу 6xN. Мне кажется, удобнее всего это сделать через Excel, если учесть, что нужно их выгружать из файла.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
27.05.2012, 20:04  [ТС]
using Excel = Microsoft.Office.Interop.Excel;
У меня нету такого пространства имен. С чем это может быть связано? Пробовал референс добавить, там тоже нету похожих.
Миниатюры
Экспорт в массив из Exel  
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
28.05.2012, 09:27
Цитата Сообщение от Psilon Посмотреть сообщение
Пробовал референс добавить
На что референс?
Нужен Microsoft.Office.Interop.Excel.dll
Скачать можно здесь
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
28.05.2012, 11:05  [ТС]
turbanoff, я думал он в стандартной поставке есть И он скачал какой-то экзешник для 2003 офиса, при попытке установки орет,что у меня десятый, а третьего нету

Все, разобрался, есть оно в стандартой поставке, просто библиотеки нету в списке библиотек, но если вручную через эксплорер скормить dll'ку, то заработает.

Добавлено через 22 минуты
Кроме того, ругается на строчку
C#
1
Excel.Worksheet sheet = app.ActiveSheet;
Ошибка 1 Не удается неявно преобразовать тип "object" в "Microsoft.Office.Interop.Excel.Workshee t". Существует явное преобразование (возможно, пропущено приведение типов)
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
28.05.2012, 11:17  [ТС]
Ладно, с этим тоже справился, но вот ваш код работать не хочет: говорит ,что пустой объект
Миниатюры
Экспорт в массив из Exel  
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
28.05.2012, 11:27
Скорее всего та ячейка пуста.

Добавлено через 4 минуты
Цитата Сообщение от Psilon Посмотреть сообщение
И он скачал какой-то экзешник для 2003 офиса, при попытке установки орет,что у меня десятый, а третьего нету
Если расковырять архиватором, то можно достать dll-ку. Она там называется EXCELPIA.DLL.
Она для 2003-го, но точно работать будет и на 2007 и на 2010.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
28.05.2012, 11:31  [ТС]
turbanoff, вот документ, нет пустых клеток
Миниатюры
Экспорт в массив из Exel  
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
28.05.2012, 11:51
Формат ячеек посмотрети какой у Вас стоит.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
28.05.2012, 12:01  [ТС]
Петррр, как это можно сделать? И что это за форматы? В экселе особо не работал.
0
1 / 1 / 1
Регистрация: 20.03.2016
Сообщений: 26
24.06.2016, 11:51
Петррр,
Как сравнивать таблицу SQL и фаил EXEL
1
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
24.06.2016, 18:42
Раз подняли такую старую тему (а это значит её кто-то может найти по поиску), то я дам, как я считаю, более правильный (быстрый) способ получения данных с листа Excel в массив и для примера выгрузки его в dataGridView

Если коротко, то вот 3 варианта. Чем они отличаются указано в комментариях

C#
1
2
3
4
5
6
7
8
9
//ВАРИАНТ 1 - если мы не знаем размер нашей таблицы, но она начинается с А1 и ниже, в таблице не должно быть пустых строк
var arrData = (object[,])xlSht.Range["A1"].CurrentRegion.Value;
            
//ВАРИАНТ 2 - если мы знаем точный размер нашей таблицы, например, A1:E50
var arrData = (object[,])xlSht.Range["A1:E50"].Value; 
            
//ВАРИАНТ 3 - если мы не знаем, где заканчивается наша таблица, но знаем начальную ячейку, например, A3 и ниже, в таблице могут быть пустые строки
int iLastRow = xlSht.Cells[xlSht.Rows.Count, "A"].End[Excel.XlDirection.xlUp].Row;  //последняя заполненная строка в столбце А
var arrData = (object[,])xlSht.Range["A3:E" + iLastRow].Value; //если мы знаем размер нашей таблицы, например, A1:D50

Вот весь код
Не забудьте указать вверху using Excel = Microsoft.Office.Interop.Excel; и указать ссылку на Microsoft Excel 15.0 Object Library в меню Project - Add Reference... - COM (у вас может быть не 15.0, а другая версия Excel)

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
 private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog opf = new OpenFileDialog();
            opf.Filter = "Microsoft Excel (*.xls*)|*.xls*";
            if (opf.ShowDialog() != DialogResult.OK)
            {
                MessageBox.Show("Вы не выбрали Excel файл!", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            string filename = opf.FileName;
            
            Excel.Application xlApp = new Excel.Application();
            Excel.Workbook xlWB;
            Excel.Worksheet xlSht;
            Excel.Range xlRng;
            int iRow, iCol;                    
 
            xlWB = xlApp.Workbooks.Open(filename);
            xlSht = xlWB.Worksheets["Лист1"]; //имя листа с данными
 
            //ВАРИАНТ 1 - если мы не знаем размер нашей таблицы, но она начинается с А1 и ниже, в таблице не должно быть пустых строк
            var arrData = (object[,])xlSht.Range["A1"].CurrentRegion.Value;
            
            //ВАРИАНТ 2 - если мы знаем точный размер нашей таблицы, например, A1:E50
            //var arrData = (object[,])xlSht.Range["A1:E50"].Value; 
            
            //ВАРИАНТ 3 - если мы не знаем, где заканчивается наша таблица, но знаем начальную ячейку, например, A3 и ниже, в таблице могут быть пустые строки
            //int iLastRow = xlSht.Cells[xlSht.Rows.Count, "A"].End[Excel.XlDirection.xlUp].Row;  //последняя заполненная строка в столбце А
            //var arrData = (object[,])xlSht.Range["A3:E" + iLastRow].Value; //если мы знаем размер нашей таблицы, например, A1:D50
 
            //закрываем файл и закрываем Excel, он нам больше не нужен
            xlWB.Close(false); //false - закрываем книгу не сохраняя изменения (true - сохранить изменения)
            xlApp.Quit();
 
            //выгрузка данных в dataGridView
            dataGridView1.RowCount = arrData.GetUpperBound(0); //кол-во строк
            dataGridView1.ColumnCount = arrData.GetUpperBound(1); //кол-во столбцов
 
            for (iRow = 1; iRow <= dataGridView1.RowCount; iRow++)
            {
                for (iCol = 1; iCol <= dataGridView1.ColumnCount; iCol++)
                {
                    dataGridView1.Rows[iRow - 1].Cells[iCol - 1].Value = arrData[iRow, iCol];
                }
            }
        }
1
#MRoose
 Аватар для MIRAMIX
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
01.10.2018, 22:05
Pavel55, здоровья Вам!) Уже что-то
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.10.2018, 22:05
Помогаю со студенческими работами здесь

Экспорт Exel в Access
Есть база данных в которую требуется по необходимости заносить сведения о районе, городе, улице, почтовом индексе. изначально данные по...

Экспорт таблицы StringGrid в Exel
помогите пожалуйста(((((((( вроде все правильно написала:help::help::help::help::help::help::help:

Экспорт их Exel в CSV - Кодировка
Есть Exel файл. Там есть русские символы и они отображаются нормально. Но если я экспортирую в csv то все русские символы станут знаками...

Нестандартные отчёты и экспорт в exel
Добрый день всем. Хочу спросить знатоков, где достать ссылку на примеры с hta отчётами. Так же хочу спросить про экспорт. Я посмотрел...

Экспорт трех DBChart в Exel
Короче проблема такая. Есть DBGrid. При клике на строке рисуется сложный график в DBChart. Необходимо кликнуть на трех разных строках...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru