Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/40: Рейтинг темы: голосов - 40, средняя оценка - 4.95
0 / 0 / 1
Регистрация: 07.08.2015
Сообщений: 3
1
.NET 4.x

Excel, Range - Добавление массива в диапазон ячеек

07.08.2015, 19:09. Показов 7740. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Нужна помощь:
Пишу простой парсер, который из файлов .xlsx собирает нужную информацию в List. После List преобразовывается в массив и его нужно вставить диапазон ячеек другого 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
using System;
using System.IO;
using System.Data;
using System.Collections.Generic;
using Excel;
using EXCEL = Microsoft.Office.Interop.Excel;
 
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int writePos = 1;
            string key = "Контактный телефон:";
            string path = "C:\\Users\\USERNAME\\Desktop\\FOLDER";
            List<string> numbers = new List<string>() { "1", "2", "3", "4", "5" }; /* Тестовый Лист, дабы не проходить по 3к+ файлам excel */
 
            DirectoryInfo dir = new DirectoryInfo(path);
            FileInfo[] files = dir.GetFiles("*.*", SearchOption.AllDirectories);
 
            EXCEL.Application ObjExcel = new EXCEL.Application();
            EXCEL.Workbook ObjWorkBook;
            EXCEL.Worksheet ObjWorkSheet;
            //Книга.
            ObjWorkBook = ObjExcel.Workbooks.Add(System.Reflection.Missing.Value);
            //Таблица.
            ObjWorkSheet = (EXCEL.Worksheet)ObjWorkBook.Worksheets.get_Item(1);
            object misValue = System.Reflection.Missing.Value;
 
            string[] finalNumber = numbers.ToArray();
            EXCEL.Range myRange = (EXCEL.Range) ObjWorkSheet.Range["A1", "A"+finalNumber.Length.ToString()];
            myRange.Value = finalNumber; /* По всему диапазону ячеек после создания файлов будет лишь первое значение массива */
            
            Console.WriteLine("Завершено.");
            ObjWorkBook.SaveAs("C:\\Users\\USERNAME\\Desktop\\Base.xlsx");
            Console.ReadKey();
            ObjWorkBook.Close(true, misValue, misValue);
            ObjExcel.Quit();
        }
    }
}
В итоге вместо уникальных значений ячеек, в каждой ячейки таблицы первое значение из массива.
Прошу помощи, поскольку десктоп не профиль и с c# знаком на уровне "походу читая док учу язык".
Относительный тщательный поиск на просторах интернета не помог ни разу, стало не понятней - почти все Range получают ф-ей get_range(from,to), у меня онная не работает. Грешу на разницу в версих .NET. Сижу на Win 10, в ней, судя по вики, используется версия 4.6.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.08.2015, 19:09
Ответы с готовыми решениями:

Создание на диаграмме Excel ряда со ссылкой на диапазон Range ячеек
Всем привет! Помогите решить задачку. Есть задача: с помощью кода vb.net обработать текстовые...

Скопировать диапазон ячеек одной книги Excel в другую книгу Excel
Из темы все ясно... Не могу разобраться никак. Можно ли открыть одну книгу, скопировать диапазон...

Диапазон ячеек в Excel
Всем доброго времени суток! Есть код: Excel::RangePtr pRange { variant_t KK = &quot;A5&quot;;...

Выделить диапазон ячеек в Excel
Помогите люди добрые! Нужно написать макрос в Excel. Задание следующее - Выделить диапазон ячеек и...

3
Фрилансер
735 / 352 / 96
Регистрация: 05.05.2014
Сообщений: 2,621
07.08.2015, 19:42 2
давным давно парсил эксель с помощью - https://exceldatareader.codeplex.com. как то так:
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
                // Open document
                string filename = dlg.FileName;
 
 
                List<DisciplineCourse1> dc = new List<DisciplineCourse1>();
                FileStream stream = File.Open(filename, FileMode.Open, FileAccess.Read);
                IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
 
                //4. DataSet - Create column names from first row
                excelReader.IsFirstRowAsColumnNames = true;
                DataSet result = excelReader.AsDataSet();
 
                bool space = false;
                foreach (DataRow row in result.Tables[0].Rows)
                {
                        if (!(row[result.Tables[0].Columns[14]] is System.DBNull))
                        {
                            space = false;
                        }
 
                        if (space || (!(row[result.Tables[0].Columns[14]] is System.DBNull) && (double)row[result.Tables[0].Columns[14]] == 27.0))
                        {
                            if ((double)row[result.Tables[0].Columns[14]] == 27.0)
                            {
                                space = true;
                            }
                            if (row[result.Tables[0].Columns[1]] is System.DBNull)
                            {
                                var course = (double)row[result.Tables[0].Columns[5]];
                                dc.Last().Courses1.Add((int)course);
                            }
                            else
                            {
                                dc.Add(new DisciplineCourse1
                                {
                                    Courses1 = new List<int>(),
                                    Discipline1 = new Discipline1 { Name = row[result.Tables[0].Columns[1]] as string }
                                });
                                var course = (double)row[result.Tables[0].Columns[4]];
                                dc.Last().Courses1.Add((int)course);
                            }
                        }
                    }
                }
1
0 / 0 / 1
Регистрация: 07.08.2015
Сообщений: 3
08.08.2015, 04:33  [ТС] 3
pro_100_gram, Спасибо за ответ. С парсингом я разобрался - в коде просто опустил кусок, который читает из файла и пишет в List(будущий array). Суть проблемы не в чтении, а в одноразовой записи сразу всей информации, т.е массива, в файл Excel, созданный, как указано в коде. Программа записывает во все ячейки лишь 1 значение из массива. Словно в коде вот так:
C#
1
2
 
myRange.Value = finalNumber[0];
А не вот так:
C#
1
2
 
myRange.Value = finalNumber;
Все еще нужна помощь.
0
0 / 0 / 0
Регистрация: 03.01.2021
Сообщений: 1
03.01.2021, 19:58 4
5 лет прошло, но всё же) Гугление не помогло, пришлось самому тестировать...
В общем суть решения заключается в использовании двумерного массива...

Строчки вашего кода

C#
1
2
3
string[] finalNumber = numbers.ToArray();
EXCEL.Range myRange = (EXCEL.Range) ObjWorkSheet.Range["A1", "A"+finalNumber.Length.ToString()];
myRange.Value = finalNumber; /* По всему диапазону ячеек после создания файлов будет лишь первое значение массива */
Заменить на:

C#
1
2
3
4
5
6
string[,] finalNumber = new string[numbers.Count, 1]; //Создаём двумерный массив
for (int i = 0; i < numbers.Count; i++)  //циклом перебираем из numbers в созданный двумерный массив
{
   finalNumber[i, 0] = numbers[i];
} //на выходе получаем {{"1"},{"2"},{"3"},{"4"},{"5"}}
ObjWorkSheet.Range["A1", "A" + (numbers.Count).ToString()].Value2 = finalNumber; //записываем полученный двумерный массив в Range листа
0
03.01.2021, 19:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.01.2021, 19:58
Помогаю со студенческими работами здесь

Динамичный диапазон ячеек Excel
Есть диапазон ячеек, в который необходимо заносить информацию из datagridview. Сейчас он задается...

Combobox и диапазон ячеек в Excel
Используется лист1 экселя, как миниатюрная база данных. На листе2 есть списки с данными, которые...

Вывод массивов в диапазон ячеек Excel
Здравствуйте, есть функция, в которой заполняется одномерный массив (заполняется правильно),...

Диапазон ячеек из Excel скопировать в dbgrid
Есть лист Excel, копируем диапазон А1:А5, теперь его нужно вставить в dbgrid. Подскажите, как это...

Скопировать в массив диапазон ячеек из excel
Добрый день. Узлом завязался что бы забрать диапазон ячеек из эксель. По одной ячейке забирать...

Как прочитать диапазон ячеек Excel?
Здравствуйте. Как мне обратиться к определенному диапазону ячеек таблицы Excel и прочитать его в...


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

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