Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
14 / 14 / 8
Регистрация: 12.08.2013
Сообщений: 202

Построчный перенос данных из datagrid в word

08.09.2015, 09:15. Показов 5487. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Пытаюсь перенести данные из формы с текст боксами и датагридом в word
C#
1
2
3
4
5
public partial class Form3 : Form
    {
        private readonly string tmpword = AppDomain.CurrentDomain.BaseDirectory  + "template.docx";
        .......
        {
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
private void button6_Click(object sender, EventArgs e)
        {
            var wordapp = new word.Application();
            wordapp.Visible = false;
            try
            {
                for (int i = 0; i <= dataGridView1.Rows.Count - 2; i++)
                {
                    var uchastok = textBox1.Text;
                    var obect = textBox2.Text;
                    var project = textBox3.Text;
                    var fio = textBox6.Text;
                    var name = dataGridView1.Rows[i].Cells[0].Value.ToString();
                    var type = dataGridView1.Rows[i].Cells[1].Value.ToString();
                    var zavod = dataGridView1.Rows[i].Cells[2].Value.ToString();
                    var izm = dataGridView1.Rows[i].Cells[3].Value.ToString();
                    var kolvo = dataGridView1.Rows[i].Cells[4].Value.ToString();
                    var srok = dataGridView1.Rows[i].Cells[5].Value.ToString();
                    var address = dataGridView1.Rows[i].Cells[6].Value.ToString();
                    var postav = dataGridView1.Rows[i].Cells[7].Value.ToString();
                    var prim = dataGridView1.Rows[i].Cells[8].Value.ToString();
 
                    var wordDocument = wordapp.Documents.Open(tmpword);
                    ReplaceWordStub("{uchastok}", uchastok, ref wordDocument);
                    ReplaceWordStub("{obect}", obect, ref wordDocument);
                    ReplaceWordStub("{project}", project, ref wordDocument);
                    ReplaceWordStub("{fio}", fio, ref wordDocument);
                    ReplaceWordStub("{name}", name, ref wordDocument);
                    ReplaceWordStub("{type}", type, ref wordDocument);
                    ReplaceWordStub("{zavod}", zavod, ref wordDocument);
                    ReplaceWordStub("{izm}", izm, ref wordDocument);
                    ReplaceWordStub("{kolvo}", kolvo, ref wordDocument);
                    ReplaceWordStub("{srok}", srok, ref wordDocument);
                    ReplaceWordStub("{address}", address, ref wordDocument);
                    ReplaceWordStub("{postav}", postav, ref wordDocument);
                    ReplaceWordStub("{prim}", prim, ref wordDocument);
                    wordDocument.SaveAs2(AppDomain.CurrentDomain.BaseDirectory + "\\" + "Temp");
                    wordapp.Visible = true;
                }
 
            }
            catch
            {
                //MessageBox.Show(Exception );
            }
Вордовский документ в аттаче
При попытке вывести в ворде, тестбоксы передают значения нормально, а вот из грида передается последняя строка.
Подскажите как можно передать весь датагрид.
Миниатюры
Построчный перенос данных из datagrid в word  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.09.2015, 09:15
Ответы с готовыми решениями:

Построчный перенос данных из ячеек Excel в закладки Word
Добрый день, уважаемые форумчане! :) Помогите, пожалуйста, не смогла найти решения поставленной задачи. Перерыла много форумов, нашла...

Построчный парсинг файла и перенос данных в одномерный в массив
собственно задача. имеется txt файл целыми цифрами, нужно спарсить эти цифры с каждой строки и перенести в массив, для дальнейших...

Перенос данных из трех таблиц DataGrid в другую таблицу DataGrid
Коллеги, всем добрый день!. Прошу у Вас помощи вот в таком вопросе. Я разрабатываю БД подход CodeFirst на С#. У меня есть на WinForm 3...

17
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
08.09.2015, 09:52
Простой заменой так не сделаешь. Строки в таблицу надо добавлять.
0
14 / 14 / 8
Регистрация: 12.08.2013
Сообщений: 202
08.09.2015, 09:58  [ТС]
это я понял. а как можно это сделать?
Или как это можно сделать иначе?
0
80 / 73 / 25
Регистрация: 26.10.2010
Сообщений: 231
08.09.2015, 11:04
damonxx,
Поменять логику работы своей программы
А не отправлять в цикле все значения из дгв в одни и те же ячейки.
По этому последнее значение и видите.
0
14 / 14 / 8
Регистрация: 12.08.2013
Сообщений: 202
08.09.2015, 11:17  [ТС]
вот об этом я и спрашиваю, как корректно это можно сделать...
0
80 / 73 / 25
Регистрация: 26.10.2010
Сообщений: 231
08.09.2015, 13:24
damonxx,

возможно эти варианты подойдут:
http://stackoverflow.com/quest... t-open-xml

по сути, нужно получить из файла объект таблицы и клонировать строку, которую потом добавлять к таблице.
0
 Аватар для wm_leviathan
214 / 214 / 73
Регистрация: 12.01.2011
Сообщений: 767
09.09.2015, 23:30
я бы не заморачивался с шаблонами ворда, а использовал бы стандартный reportViewer. Нарисовал бы в нем отчет и формировал бы его по нажатию кнопки, и в нем, по мимо печати есть экспорт в word, excel и pdf. Кстати его можно сразу сохранять в любой из этих форматов без превью.
0
14 / 14 / 8
Регистрация: 12.08.2013
Сообщений: 202
10.09.2015, 07:12  [ТС]
так я не могу найти где этот reportviewer, уже и ставил его, а в студии не кажет.
0
 Аватар для wm_leviathan
214 / 214 / 73
Регистрация: 12.01.2011
Сообщений: 767
10.09.2015, 17:35
https://www.cyberforum.ru/ado-... 62558.html все разжевано
0
14 / 14 / 8
Регистрация: 12.08.2013
Сообщений: 202
11.09.2015, 07:59  [ТС]
Так в том то и вопрос что у меня нигде нет reportviewer
0
 Аватар для wm_leviathan
214 / 214 / 73
Регистрация: 12.01.2011
Сообщений: 767
11.09.2015, 12:32
а какая студия используется ? в 2010 2012 2013 и 2015 точно есть.
0
14 / 14 / 8
Регистрация: 12.08.2013
Сообщений: 202
11.09.2015, 12:34  [ТС]
2015 Enterprise
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
15.09.2015, 14:52
Лучший ответ Сообщение было отмечено damonxx как решение

Решение

Заполнение таблицы с добавлением строк (изначально присутствует только одна строка шапки):
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
            Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
 
            object fileName = "d:\\doc1.docx";
            object falseValue = false;
            object trueValue = true;
            object missing = Type.Missing;
 
            Microsoft.Office.Interop.Word.Document doc = app.Documents.Open(ref fileName, ref missing, ref falseValue,
                ref missing, ref missing, ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing);
 
            Microsoft.Office.Interop.Word.Table tbl = app.ActiveDocument.Tables[1];
 
            for (int i = 1; i <= 3; ++i) // добавить три строки
            {
                tbl.Rows.Add(ref missing);
                // i + 1 - пропуск первой строки
                tbl.Rows[i + 1].Cells[1].Range.Text = "A" + i.ToString();
                tbl.Rows[i + 1].Cells[2].Range.Text = "B" + i.ToString();
                tbl.Rows[i + 1].Cells[3].Range.Text = "C" + i.ToString();
            }
 
            doc.Save();
1
14 / 14 / 8
Регистрация: 12.08.2013
Сообщений: 202
19.09.2015, 09:24  [ТС]
Спасибо nmcf, немного подшаманив код заработало.
Если кому надо берите
Кнопка
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
private void button9_Click(object sender, EventArgs e)
        {
            File.Copy(AppDomain.CurrentDomain.BaseDirectory + "template.docx", AppDomain.CurrentDomain.BaseDirectory +"\\"+ "Temp" + "\\" + label12.Text + ".docx");
            object doc = AppDomain.CurrentDomain.BaseDirectory + "\\" + "Temp" + "\\" + label12.Text + ".docx";
            var wordapp = new word.Application();
            wordapp.Visible = false;
            object missing = Type.Missing;
            object falseValue = false;
            try
            {
                for (int i = 0; i <= dataGridView1.Rows.Count - 2; i++)
                {
                    var uchastok = textBox1.Text;
                    var obect = textBox2.Text;
                    var project = textBox3.Text;
                    var fio = textBox6.Text;
                    var name = dataGridView1.Rows[i].Cells[0].Value.ToString();
                    var type = dataGridView1.Rows[i].Cells[1].Value.ToString();
                    var zavod = dataGridView1.Rows[i].Cells[2].Value.ToString();
                    var izm = dataGridView1.Rows[i].Cells[3].Value.ToString();
                    var kolvo = dataGridView1.Rows[i].Cells[4].Value.ToString();
                    var srok = dataGridView1.Rows[i].Cells[5].Value.ToString();
                    var address = dataGridView1.Rows[i].Cells[6].Value.ToString();
                    var postav = dataGridView1.Rows[i].Cells[7].Value.ToString();
                    var prim = dataGridView1.Rows[i].Cells[8].Value.ToString();
                    
                    var wordDocument = wordapp.Documents.Open(doc, missing, falseValue, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
                    ReplaceWordStub("{uchastok}", uchastok, ref wordDocument);
                    ReplaceWordStub("{obect}", obect, ref wordDocument);
                    ReplaceWordStub("{project}", project, ref wordDocument);
                    ReplaceWordStub("{fio}", fio, ref wordDocument);
                    ReplaceWordStub("{name}", name, ref wordDocument);
                    ReplaceWordStub("{type}", type, ref wordDocument);
                    ReplaceWordStub("{zavod}", zavod, ref wordDocument);
                    ReplaceWordStub("{izm}", izm, ref wordDocument);
                    ReplaceWordStub("{kolvo}", kolvo, ref wordDocument);
                    ReplaceWordStub("{srok}", srok, ref wordDocument);
                    ReplaceWordStub("{address}", address, ref wordDocument);
                    ReplaceWordStub("{postav}", postav, ref wordDocument);
                    ReplaceWordStub("{prim}", prim, ref wordDocument);
                    Microsoft.Office.Interop.Word.Table tbl = wordapp.ActiveDocument.Tables[2];
                    for (int j = 3; j <=3; ++j)
                    {
                        tbl.Rows.Add(missing);
                        int s = 2;
                        tbl.Rows[j + 1].Cells[1].Range.Text = "" + s.ToString();
                        tbl.Rows[j + 1].Cells[2].Range.Text = dataGridView1.Rows[i].Cells[0].Value.ToString();
                        tbl.Rows[j + 1].Cells[3].Range.Text = dataGridView1.Rows[i].Cells[1].Value.ToString();
                        tbl.Rows[j + 1].Cells[4].Range.Text = dataGridView1.Rows[i].Cells[2].Value.ToString();
                        tbl.Rows[j + 1].Cells[5].Range.Text = dataGridView1.Rows[i].Cells[3].Value.ToString();
                        tbl.Rows[j + 1].Cells[6].Range.Text = dataGridView1.Rows[i].Cells[4].Value.ToString();
                        tbl.Rows[j + 1].Cells[7].Range.Text = dataGridView1.Rows[i].Cells[5].Value.ToString();
                        tbl.Rows[j + 1].Cells[8].Range.Text = dataGridView1.Rows[i].Cells[6].Value.ToString();
                        tbl.Rows[j + 1].Cells[9].Range.Text = dataGridView1.Rows[i].Cells[7].Value.ToString();
                        tbl.Rows[j + 1].Cells[10].Range.Text = dataGridView1.Rows[i].Cells[8].Value.ToString();
 
                     
                    }
                   
                }
 
 
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Exception" );
            }
        }
Обработчик
C#
1
2
3
4
5
6
7
private void ReplaceWordStub(string stubToReplase, string text, ref word.Document wordDocument)
        {
            var range = wordDocument.Content;
            range.Find.ClearFormatting();
            range.Find.Execute(FindText: stubToReplase, ReplaceWith: text);
 
        }
Путь к шаблону
C#
1
private readonly string tmpword = AppDomain.CurrentDomain.BaseDirectory + "template.docx";
и подключаем библиотеку
C#
1
using word = Microsoft.Office.Interop.Word;
0
14 / 14 / 8
Регистрация: 12.08.2013
Сообщений: 202
28.09.2015, 08:35  [ТС]
немного не получается, при датагриде более 2 строк, при выводе в шаблон замещает вторую строку.
я так понимаю после второй строки он не переходит на следующую строку в шаблоне, хотя новые строки создает.
подскажите где недочет.
0
14 / 14 / 8
Регистрация: 12.08.2013
Сообщений: 202
29.09.2015, 11:00  [ТС]
C помощью молотка зубила и какой-та матери заставил работать.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
29.09.2015, 21:41
И в чём было дело?
0
14 / 14 / 8
Регистрация: 12.08.2013
Сообщений: 202
30.09.2015, 05:08  [ТС]
йа хз вот код если интересно
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
 private void button9_Click(object sender, EventArgs e)
        {
            File.Copy(AppDomain.CurrentDomain.BaseDirectory + "template.docx", AppDomain.CurrentDomain.BaseDirectory + "\\" + "Temp" + "\\" + label12.Text + ".docx");
            object doc = AppDomain.CurrentDomain.BaseDirectory + "\\" + "Temp" + "\\" + label12.Text + ".docx";
            var wordapp = new word.Application();
            wordapp.Visible = false;
            object missing = Type.Missing;
            object falseValue = false;
            try
            {
                
                var uchastok = textBox1.Text;
                    var obect = textBox2.Text;
                    var project = textBox3.Text;
                    var fio = textBox6.Text;
                    
                    var wordDocument = wordapp.Documents.Open(doc, missing, falseValue, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
                    ReplaceWordStub("{uchastok}", uchastok, ref wordDocument);
                    ReplaceWordStub("{obect}", obect, ref wordDocument);
                    ReplaceWordStub("{project}", project, ref wordDocument);
                    ReplaceWordStub("{fio}", fio, ref wordDocument);
                
                    for (int j = 2; j<= dataGridView1.Rows.Count;  j++)
                    {
                        Microsoft.Office.Interop.Word.Table tbl = wordapp.ActiveDocument.Tables[2];
                        tbl.Rows.Add(ref missing);
 
                  
                    
                        tbl.Rows[j + 1].Cells[1].Range.Text = Convert.ToString(j-1);
                        tbl.Rows[j + 1].Cells[2].Range.Text = dataGridView1.Rows[j - 2].Cells[0].Value.ToString();
                        tbl.Rows[j + 1].Cells[3].Range.Text = dataGridView1.Rows[j - 2].Cells[1].Value.ToString();
                        tbl.Rows[j + 1].Cells[4].Range.Text = dataGridView1.Rows[j - 2].Cells[2].Value.ToString();
                        tbl.Rows[j + 1].Cells[5].Range.Text = dataGridView1.Rows[j - 2].Cells[3].Value.ToString();
                        tbl.Rows[j + 1].Cells[6].Range.Text = dataGridView1.Rows[j - 2].Cells[4].Value.ToString();
                        tbl.Rows[j + 1].Cells[7].Range.Text = dataGridView1.Rows[j - 2].Cells[5].Value.ToString();
                        tbl.Rows[j + 1].Cells[8].Range.Text = dataGridView1.Rows[j - 2].Cells[6].Value.ToString();
                        tbl.Rows[j + 1].Cells[9].Range.Text = dataGridView1.Rows[j - 2].Cells[7].Value.ToString();
                        tbl.Rows[j + 1].Cells[10].Range.Text = dataGridView1.Rows[j - 2].Cells[8].Value.ToString();
                        wordapp.Visible = true;
                    
                }
 
 
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Exception");
            }
        }
На конкурс пряморукости кода не претендую, но работать работает...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.09.2015, 05:08
Помогаю со студенческими работами здесь

Частичный перенос Datagrid в таблицу Word
Всем привет! Очень нужна помощь! Как сделать экспорт в Word не всей таблицы. Получается у меня есть таблица, в ней находится столбец...

Перенос данных из Excel в Word (на основе Word шаблона)
Пожалуйста помогите, приведите какой-то пример как организовать этот процесс нужно из определенных ячеек Excel'a, перенести данные в...

Перенос данных в datagrid
Сейчас делаю курсовую работу, и застрял на одной проблеме, не могу написать обработчик событий который будет выводить данные из textBox, в...

Экспорт данных из datagrid в word
Здравствуйте, у меня есть datagrid с данными, при нажатии на кнопку должна создаваться и заполняться таблица в word. Таблицу создать...

Перенос данных из Word в Word
Здравствуйте!Проблема возникла такого рода,что нужно определенные данные из таблицы Word в одном файле перенести в сводную таблицу Word во...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru