Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/225: Рейтинг темы: голосов - 225, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 09.09.2014
Сообщений: 120

Запись данных в excel

03.09.2016, 19:01. Показов 47327. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Моя программа записывает в ячейки екселя текст, который находиться в текстовых документах. Как поменять ячейки в которые будут записываться данные я тоже понял (parser.txt в коде). Суть проблемы в том, что программа каждый раз создает новый ексель и старые данные не сохраняются? Или что, как? Я не пойму. Есть идеи?

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
63
64
65
66
67
68
69
70
71
72
73
74
75
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using ConsoleApplication13;
using Excel = Microsoft.Office.Interop.Excel;
using System.IO;
using System.Text;
 
namespace ConsoleApplication13
{
    class Price
    {
 
        public string Name { get; set; }
        public string Cost { get; set; }
        public string Site { get; set; }
 
    }
    class PrintExel
    {
        public static void ExportToExcel(List<Price> vPices)
        {
            // Загрузить Excel, затем создать новую пустую рабочую книгу
            Excel.Application excelApp = new Excel.Application();
 
            // Сделать приложение Excel видимым
            excelApp.Visible = true;
            excelApp.Workbooks.Add();
            Excel._Worksheet workSheet = excelApp.ActiveSheet;
            // Установить заголовки столбцов в ячейках
            workSheet.Cells[1, "A"] = "NameCompany";
            workSheet.Cells[1, "B"] = "Site";
            workSheet.Cells[1, "C"] = "Cost";
            
            string parser = File.ReadAllText(@"parser.txt", Encoding.Default);
            
            int parsers =  Convert.ToInt32(parser);
            int row = 1;
            foreach (Price c in vPices)
            {
                row++;
                workSheet.Cells[parsers, "A"] = c.Name;
                workSheet.Cells[parsers, "B"] = c.Site;
                workSheet.Cells[parsers, "C"] = c.Cost;
            }
 
           
            excelApp.DisplayAlerts = false;
            workSheet.SaveAs(string.Format(@"{0}\Price.xlsx", Environment.CurrentDirectory));
 
            excelApp.Quit();
 
        }
        
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            /// Тест записи в эксель
             string a = File.ReadAllText(@"title.txt", Encoding.Default);
             string b = File.ReadAllText(@"asdd.txt", Encoding.Default);
             string c = File.ReadAllText(@"asd.txt", Encoding.Default);
            var ListPricee = new List<Price>();
            ListPricee.Add(new Price { Name = a, Site = b, Cost = c });
          
 
            // Записываем в эксель
            PrintExel.ExportToExcel(ListPricee);
 
            
        }
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.09.2016, 19:01
Ответы с готовыми решениями:

Запись данных в Excel
Дан массив строк string stings = { &quot;Hello&quot;, &quot;world&quot;, &quot;1234&quot; }; Как записать &quot;Hello&quot; в A1, &quot;world&quot; в B1, &quot;1234&quot; в B2...

Запись данных с тестбоксов в Excel
Всем привет) В общем дали такое задание: Написать программу на C#, представляющую собой 9 полей TextBox и кнопкой. Первое поле -...

Запись данных из excel в массив
Нужен пример записи данных из excel в массив(зубчатый). Нигде не могу найти.

5
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
03.09.2016, 21:53
Если честно, то идей нет.

вы пишите: "программа каждый раз создает новый ексель и старые данные не сохраняются?"
Это вопрос? у вас в конце предложения стоит вопросительный знак.
Ну, да, у вас каждый раз создаётся новый Excel в строке
Excel.Application excelApp = new Excel.Application();
и даже создаётся новая Книга
excelApp.Workbooks.Add();

По вашему коду файл должен сохраняться в этой строке
workSheet.SaveAs(string.Format(@"{0}\Pri ce.xlsx", Environment.CurrentDirectory));


я попробовал вот такой код, файл у меня сохраняется. Правда я сохраняю Книгу, а не Лист, как это делаете вы в вашем коде
C#
1
2
3
4
5
6
7
8
9
10
            Excel.Application excelApp = new Excel.Application();
            Excel.Workbook workBook = excelApp.Workbooks.Add();
            Excel.Worksheet workSheet = workBook.ActiveSheet;
            workSheet.Cells[1, "A"] = "NameCompany";
            workSheet.Cells[1, "B"] = "Site";
            workSheet.Cells[1, "C"] = "Cost";
            workBook.Close(true, "G:\\C#\\Price.xlsx"); 
            excelApp.Quit();
            MessageBox.Show("Файл успешно сохранён!");
        }
вот с этим циклом я не очень понял
C#
1
2
3
4
5
6
7
foreach (Price c in vPices)
            {
                row++;
                workSheet.Cells[parsers, "A"] = c.Name;
                workSheet.Cells[parsers, "B"] = c.Site;
                workSheet.Cells[parsers, "C"] = c.Cost;
            }
Почему вы используете parsers вместо row в строках workSheet.Cells[parsers, "A"] ?
Переменная row будет увеличиваться в цикле, а вот на счёт parsers я не уверен
0
1 / 1 / 0
Регистрация: 09.09.2014
Сообщений: 120
03.09.2016, 22:02  [ТС]
В parsers у меня находиться число, которое увеличивается на 1 при каждом цыкле другой программы.

Суть:

У меня есть программа, которая обработала текст, потом этот текст разбивается на 3 текстовика. После этого эти 3 текстовика вставляются в определенные колонки в екселе. Вот тот parsers и контролирует в какие колонки оно будет вставляться. Допустим, если программа обрабатывает 24ый текст, то значения parsers будет - 24, которое потом используется этой программой чтобы добавить текст в 24 колонку A,B,C.

Проблема в том, что программа каждый раз попросту вставляет текст в нужные колонки (делает все верно), но удаляет старые.

Добавлено через 52 секунды
Pavel55, не пойму как сделать чтобы оно записывало и не меняло старые данные
0
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
03.09.2016, 22:11
sergiy1912, а как вы руками записываете новые данные на лист Excel?
Думаю находите глазами последнюю ячейку в столбце А и начинаете добавлять новые данные ниже последней заполненной ячейки, так?
Здесь так же, найдите последнюю заполненную ячейку программно и прибавляйте к ней счётчик +1 (++) и данные будет вставляться ниже.
C#
1
int iLastRow = xlSht.Cells[xlSht.Rows.Count, "A"].End[Excel.XlDirection.xlUp].Row;  //последняя заполненная строка в столбце А
где xlSht - лист Excel, у вас это workSheet

P.S. Так же думаю нужно не создавать постоянно новую книгу, а один раз создать, сохранить в директорию, а затем открывать её, добавлять в неё данные и закрывать файл
0
1 / 1 / 0
Регистрация: 09.09.2014
Сообщений: 120
03.09.2016, 22:33  [ТС]
Pavel55, поможете кодом, не смогу реализовать?
0
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
03.09.2016, 22:50
Лучший ответ Сообщение было отмечено sergiy1912 как решение

Решение

sergiy1912,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  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;  //последняя заполненная строка в столбце А
            for (int i = 1; i < 51; i++)
            {
                iLastRow++;
                xlSht.Cells[iLastRow, "A"].Value = i.ToString();
            }                        
            //xlApp.Visible = true;
            xlWb.Close(true); //закрыть и сохранить книгу
            xlApp.Quit();
            MessageBox.Show("Файл успешно сохранён!");
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.09.2016, 22:50
Помогаю со студенческими работами здесь

Запись данных в Excel
Суть проблемы такова, имеется файл excel в папке с проектом, цель =&gt; прочитать его и сохранитьКак новый файл в другой папке, по ходу дела...

Запись данных в открытый файл Excel
Подскажите как дозаписывать данные в файл excel, если этот файл открыт. Суть программы: Записывать в excel информацию о файлах в...

Запись в Excel данных
Здраствуйте. Как записать из ячейки StringGrid в ячейку Excel данные. Файл Excel уже созданый. Если можно какойто пример программки....

Запись данных в Excel
Подскажите, пожалуйста: 1. Как прописать в Excel заголовки? А то у меня слова делятся на буквы и в одну ячейку одну букву пишет, а нужно...

Запись данных в excel
Здравствуйте, возникла такая проблема: Есть модель демографической ситуации региона. Данные необходимо выгрузить в ecel файл. Как это...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru