Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/307: Рейтинг темы: голосов - 307, средняя оценка - 4.76
88 / 79 / 22
Регистрация: 02.07.2013
Сообщений: 628
1

Работа с Excel c нуля

07.01.2017, 16:14. Показов 58874. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
здравствуйте, я кое-как освоил работу с С# вот у меня возникло желание написать программу работающую с данными, которые записаны в Excel таблицу. в связи с этим вопрос как осуществить следующие действия: открыть таблицу, узнать ее размер, слить данные из ячейки с координатами XY или записать в таблицу что-то,

П.С. я никаких dll не умею ставить, если ваше решение содержит стороннюю dll то пожалуйста объясните, я много гуглил, но не нашел ничего понятного мне. нашел решение через COM Interop, но у меня не компилируется using Excel = Microsoft.Office.Interop.Excel; и в доступных ссылках нет Microsoft.Office.Interop.Excel чтобы подключить нужную библиотеку, но я вообще не настаиваю чтобы решение было через эту библиотеку. мне бы хоть как-то.

Добавлено через 3 часа 59 минут
народ, хелп, нужна помощь, как вы открываете Excel файлы? в интеренте разбирают Microsoft.Office.Interop.Excel но я нигде не могу найти библиотеку чтобы использовать это. подскажите как эту проблему решить можно, очень надо из экселя данные брать, а не могу.если не знаете как с этим вариантом быть, то напишите любой известный вам способ.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2017, 16:14
Ответы с готовыми решениями:

Работа с документами Excel без Microsoft.Office.Interop.Excel
всем добрый день все дело в том что для своих программ я использую БД Excel но! однако не все...

Работа с Excel (нет доступа к пространству имен Excel)
Здравствуйте! У меня проблема в том, что я делаю все так как там, но выдает ошибку в строчках на...

Экспорт в Excel: Прекращена работа программы "Microsoft Excel"
Файл сохраняется успешно, но поле строки excelApp.Quit(); Появляется окно ошибки Excel: ...

Cколько чисел больше нуля, меньше нуля и среднее всех отрицательных чисел
Помогите с кодом Задание: Вводятся N чисел. Программа считает сколько чисел больше нуля, меньше...

27
236 / 75 / 24
Регистрация: 12.05.2010
Сообщений: 216
07.01.2017, 16:50 2
Библиотека Microsoft.Office.Interop.Excel устанавливается обычно вместе с Microsoft Office, если ее не было установлено вместе с офисом, то ее можно скачать отдельно https://www.visualstudio.com/vs/office-tools/
0
88 / 79 / 22
Регистрация: 02.07.2013
Сообщений: 628
08.01.2017, 00:11  [ТС] 3
а какие-то ссылки(referensis) надо добавить?
0
Warrior
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
08.01.2017, 05:30 4
Вот неплохая библиотека https://www.nuget.org/packages/EPPlus
Легко установить через PM> Install-Package EPPlus

Тут можно посмотреть семплы и документацию https://epplus.codeplex.com/releases/view/625020
0
71 / 68 / 46
Регистрация: 02.12.2015
Сообщений: 890
Записей в блоге: 1
08.01.2017, 13:05 5
Если стоит десятка, посмотри поэтому пути C:\Windows\assembly\GAC_MSIL\Policy.11.0.Microsoft.Office.Interop.Excel\15.0.0.0 __71e9bce111e9429c
0
88 / 79 / 22
Регистрация: 02.07.2013
Сообщений: 628
08.01.2017, 13:33  [ТС] 6
библиотеку using Excel = Microsoft.Office.Interop.Excel; удалось корректно подключить. помогите написать консольное приложение, которе будет с Excel файла считывать численные данные с таких-то ячеек?

Чтобы в ячейку А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
using System;
using System.Collections.Generic;
using System.Linq;
using Excel = Microsoft.Office.Interop.Excel;
 
 
 
namespace OfficeProgramminWalkthruComplete
{
    class Walkthrough
    {
        static void Main(string[] args)
        {
 
            var excelApp = new Excel.Application();
 
            excelApp.Visible = true;
 
            excelApp.Workbooks.Add();
 
            Excel._Worksheet workSheet = excelApp.ActiveSheet;
 
            workSheet.Cells[1, "A"] = "ID Number";
 
        }
 
 
    }
}
только вопрос: куда должен сохранятся этот фаил? или это делается отдельной командой?

workSheet.Cells[1, "A"] = "ID Number"; в общем вот эта команда как я понял записывает данные, поподробнее можите написать мне как теперь считать из готового файла данные в такой-то ячейке?
1
88 / 79 / 22
Регистрация: 02.07.2013
Сообщений: 628
08.01.2017, 15:52  [ТС] 7
методом тыка кое-как нашел такой способ:
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
using System;
using System.Collections.Generic;
using System.Linq;
using Excel = Microsoft.Office.Interop.Excel;
 
 
 
namespace OfficeProgramminWalkthruComplete
{
    class Walkthrough
    {
        static void Main(string[] args)
        {
 
            var excelApp = new Excel.Application();
 
            excelApp.Visible = true;
 
            //excelApp.Workbooks.Add();
 
            
 
            excelApp.Workbooks.Open(@"C:\Users\golosalex\Desktop\Новая папка (5)\file");
Excel._Worksheet workSheet = excelApp.ActiveSheet;
            workSheet.Cells[1, "A"] = "ID Number";
 
            string a;
            var excelcells=workSheet.get_Range("A1",Type.Missing);
  a=Convert.ToString(excelcells.Value2);
 
            Console.WriteLine("a1=" + a);
 
        }
 
 
    }
}
самая неприятная проблема в том что в VS нет документации по методам из Microsoft.Office.Interop.Excel. может вы подскажите как вникать в это безобразие?
Работа с Excel c нуля


ни на русском ни на английском нет описания методов. что с этим делать? может кто знает как работают эти методы?
0
88 / 79 / 22
Регистрация: 02.07.2013
Сообщений: 628
08.01.2017, 16:10  [ТС] 8
Работа с Excel c нуля

на вопрос что добавлять в референсах на скриншоте показано, почему у меня так, а у вас не так, и почему никто не может делать скрины в ответ мне не ясно. где мне искать эту References: Microsoft.Office.Interop.Excel?. кнопка принт скринт и программа паинт есть у всех. а постить скрины можно по этой кнопке:
Работа с Excel c нуля



Легко установить через PM> Install-Package EPPlus эммм что легко? добавь ясности, сделай скриншот.
мне предлагают почитать по адресу: https://epplus.codeplex.com/releases/view/625020, но там фигня понаписана, я даже не зная должным образом инглиш вижу что там написана далеко не документация. можно мне хоть чуть ясности добавить в ответы? писанина это конечно хорошо, но целиком работающий код и скрины в работе с VS намного предпочтительнее. если, конечно хотите помочь.
0
.NET senior
440 / 358 / 137
Регистрация: 23.09.2016
Сообщений: 980
08.01.2017, 16:37 9
Цитата Сообщение от golosalex Посмотреть сообщение
я даже не зная должным образом инглиш вижу что там написана далеко не документация
Нажать на кнопочку "Documentation" справа от "Downloads" - это, конечно, сложно, я понимаю. "Не барское это дело - документацию читать", так, что ли?

Цитата Сообщение от golosalex Посмотреть сообщение
целиком работающий код и скрины в работе с VS намного предпочтительнее. если, конечно хотите помочь.
Помочь - может быть, но если будете продолжать общаться в таком тоне - желание пропадёт даже у законченных альтруистов.
0
88 / 79 / 22
Регистрация: 02.07.2013
Сообщений: 628
08.01.2017, 17:21  [ТС] 10
честное слово, не хотел никого обидеть, я просто не получаю ни одного ответа на свои вопросы, который мне хоть как-то бы помог уже 2 дня, знакомых людей, умеющих прогать у меня нет, поэтому стараюсь максимально понятно уточнять в каком виде хочу их получить и почему не годятся ответы указанные выше. если я скажу ОК ответы годятся, то тему все будут считать закрытой, хотя я ничего не понял. как мне добиться конкретики? потому что если и дальше буду видеть общие рекомендации, то пользы от них не будет никакой. в идеале бы если нашелся какой-то хороший мануал хоть на инглише. а еще желательно чтобы показали на готовом и работающем коде, как надо делать.

Работа с Excel c нуля


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

еще раз прошу помочь разобраться как работать с Excel через C# на примере консольного приложения. давайте разговор сделаем предметным и решим конкретную задачу(с виду простая).
есть фаил экселевский с именем file лежит он в папке программы. в нем в первом столбце записано в нескольких ячейках несколько цифр. надо их проссумировать и вывести в консоли ответ. зарание число цифр не известно.
0
Warrior
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
08.01.2017, 17:43 11
Лучший ответ Сообщение было отмечено golosalex как решение

Решение

Для тех кто в танке вот документация https://epplus.codeplex.com/downloads/get/1591095

Если вы не знаете как пользоваться visual studio и язык C# начать нужно именно с этого а затем разбирать работу с экселем, пример со считыванием с ячейки я уверен вам нечего не даст.

Какой смысл использовать библиотеки если для того что бы понять как их нужно использовать надо перелопатить всю документацию, обычно смотрят getting started, use case и IntelliSense если не чего непонятно то ищут другие..

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
namespace ConsoleApplication254
{
    using System;
    using System.IO;
    using System.Linq;
    using OfficeOpenXml;
 
    internal class Program
    {
        private static void Main()
        {
            using (var excel = new ExcelPackage())
            {
                var ws = excel.Workbook.Worksheets.Add("MyWorksheet");
 
                ws.Cells["A1"].Value = "ID Number";
 
                excel.SaveAs(new FileInfo("test.xlsx"));
            }
 
            using (var excel = new ExcelPackage(new FileInfo("test.xlsx")))
            {
                var ws = excel.Workbook.Worksheets.Single(n => n.Name == "MyWorksheet");
 
                var value = ws.Cells["A1"].Value.ToString();
                Console.WriteLine($"A:1 - {value}");
            }
        }
    }
}
Миниатюры
Работа с Excel c нуля   Работа с Excel c нуля  
Вложения
Тип файла: zip ConsoleApplication254.zip (4.1 Кб, 92 просмотров)
1
Warrior
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
08.01.2017, 18:07 12
Вот тоже неплохая либа https://github.com/ClosedXML/ClosedXML
примеры https://github.com/ClosedXML/ClosedXML/wiki

Вот можно посмотреть другие пакеты https://www.nuget.org/packages?q=excel
1
88 / 79 / 22
Регистрация: 02.07.2013
Сообщений: 628
08.01.2017, 19:20  [ТС] 13
вот теперь понял что делать. если по дороге возникнут вопросы буду спрашивать. спасибо.
0
88 / 79 / 22
Регистрация: 02.07.2013
Сообщений: 628
11.01.2017, 16:38  [ТС] 14
понял как считывать и как записывать с помощью той библиотеке в которой вы привели мне работающий пример теперь вот такой вопрос: если в ячейке записана формула, то ее результат не будет обновляться до того момента как я открою эксель вручную, т.е. если в ячейке (А1) записанно 100, а в ячейке (A2) записано = A1*2; то в шарпе на консоле после того как я изменю значение в ячейке А1 на 1000, я все равно получу старый результат: 200, как заставить эксель формулы обновлять?
0
Warrior
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
11.01.2017, 21:55 15
golosalex, что то вы делаете не то вот все работает

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
namespace ConsoleApplication254
{
    using System;
    using System.IO;
    using System.Linq;
    using OfficeOpenXml;
 
    internal class Program
    {
        private static void Main()
        {
            using (var excel = new ExcelPackage())
            {
                var ws = excel.Workbook.Worksheets.Add("MyWorksheet");
 
                ws.Cells["A1"].Value = 100;
                ws.Cells["A2"].Formula = "A1*2";
                excel.SaveAs(new FileInfo("test.xlsx"));
            }
 
            using (var excel = new ExcelPackage(new FileInfo("test.xlsx")))
            {
                var ws = excel.Workbook.Worksheets.Single(n => n.Name == "MyWorksheet");
 
                ws.Cells["A2"].Calculate();
 
                var beforeChange = ws.Cells["A2"].Value;
 
                Console.WriteLine($"value - {beforeChange}");
 
                ws.Cells["A1"].Value = 1000;
 
                ws.Cells["A2"].Calculate();
 
                var afterChange = ws.Cells["A2"].Value;
 
                Console.WriteLine($"value - {afterChange}");
            }
        }
    }
}
0
88 / 79 / 22
Регистрация: 02.07.2013
Сообщений: 628
12.01.2017, 09:35  [ТС] 16
ws.Cells["A2"].Calculate(); я так понимаю эта строка заставляет выполнить формулы в ячейке "A2". как раз ее я и искал

хотел подробнее узнать про Cells:
почему квадратные скобки?
как не одну ячейку выделить а произвольный кусок?
как считать весь столбец в массив или список, если не знаешь длины ексель файла?
0
.NET senior
440 / 358 / 137
Регистрация: 23.09.2016
Сообщений: 980
12.01.2017, 10:32 17
Цитата Сообщение от golosalex Посмотреть сообщение
почему квадратные скобки
Потому что это синтаксис индексаторов в C#.

Цитата Сообщение от golosalex Посмотреть сообщение
как не одну ячейку выделить а произвольный кусок
воспользоваться форматом записи интервала:
C#
1
var range = ws.Cells["A1:B6"];
0
88 / 79 / 22
Регистрация: 02.07.2013
Сообщений: 628
12.01.2017, 10:48  [ТС] 18
а можно потом выделенный кусок (допустим A1:A10) в массив запихнуть? какой-нибудь готовой функцией
0
Warrior
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
12.01.2017, 11:07 19
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
namespace ConsoleApplication254
{
    using System;
    using System.IO;
    using System.Linq;
    using OfficeOpenXml;
 
    internal class Program
    {
        private static void Main()
        {
            using (var excel = new ExcelPackage())
            {
                var ws = excel.Workbook.Worksheets.Add("MyWorksheet");
 
                ws.Cells["A1:B6"].Value = 100;
 
                var values = ws.Cells["A1:B6"].Select(n => new {n.Address, value = int.Parse(n.Value.ToString())});
 
                Console.WriteLine(string.Join(Environment.NewLine, values));
 
                excel.SaveAs(new FileInfo("test.xlsx"));
            }
        }
    }
}
0
.NET senior
440 / 358 / 137
Регистрация: 23.09.2016
Сообщений: 980
12.01.2017, 11:29 20
golosalex, например, вот так:

Ещё один вариант получения значений из столбца

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
            string desktopDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            string fileName = "TextPackage.xlsx";
            string filePath = Path.Combine(desktopDirectory, fileName);
 
            FileStream sourceFile = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
 
            using (ExcelPackage package = new ExcelPackage(sourceFile))
            {
                ExcelWorksheet ws = package.Workbook.Worksheets["TestList"];
                
                int maxRowNumber = 1048576; // максимальный индекс строки в Excel
 
                ExcelRange columnB = ws.Cells["B:B"]; // получение диапазона ячеек столбца B
                List<int> columnValues = new List<int>(20); // предполагаем, что в столбце B заполнены ячейки первых 20 строк
 
                object[,] columnArray = columnB.Value as object[,]; // получение массива значений ячеек в диапазоне
                for (int index = 0; index < maxRowNumber; ++index) // цикл по строкам
                {
                    object cellValue = columnArray[index, 0];
                    if (cellValue != null) // если значение ячейки != null
                    {
                        int number = Convert.ToInt32(cellValue); // конвертируем его в int и добавляем в список
                        columnValues.Add(number);
                    }
                    else break;
                }
 
                Console.WriteLine(string.Join("\r\n", columnValues));
            }
1
12.01.2017, 11:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2017, 11:29
Помогаю со студенческими работами здесь

Работа с Excel' ем
Подскажите пожалуйста что нужно для работы с экселем в visual studio 2008 (экспорт данных, открытие...

работа с excel
Народ задали тут заданице из одного документа excel перетащить все ячейки в другой документ excel...

работа с excel в C#
Здравствуйте. У меня к Вам вопрос про excel. Вот часть кода, которая отвечает за открытие файла и...

работа с excel
уважаемые программисты подскажите пожалуйста как можно реализовать следующее: К примеру на диске С...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru