Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 17.05.2014
Сообщений: 126
1

Ошибка при выводе информации в документе Microsoft Word

16.01.2015, 22:10. Показов 659. Ответов 12
Метки нет (Все метки)

Здравствуйте. Подскажите, пожалуйста, как исправить такую ошибку, из DataGridView нужно вывести информацию, но вместо нужной информации выводится вот такая информация
Ошибка при выводе информации в документе Microsoft Word
. Подскажите, пожалуйста, что в коде не так и как исправить? чтобы выводилась нужная информация. Кнопка создания отчёта button2

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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using Word = Microsoft.Office.Interop.Word;
using System.Reflection;
 
 
using WindowsFormsApplication1.DataSet1TableAdapters;
 
namespace WindowsFormsApplication1 {
    public partial class Form1 : Form {
        DataSet1.Отдел_кадровDataTable points1Table = new DataSet1.Отдел_кадровDataTable();
        public Form1()
        {
            InitializeComponent();
            this.Load += Form1_Load;
            button1.Click += button1_Click;
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            using (Отдел_кадровTableAdapter adapter = new Отдел_кадровTableAdapter())
            {
                adapter.Fill(points1Table);
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            var restCode = points1Table.AsEnumerable()
            .Where(r => r.Field<string>("Наименование должности") == textBox1.Text)
            .Select(r => r.Field<int>("Код должности"))
            .FirstOrDefault();
            if (restCode != 0)
            {
                DataTable selectedTable = points1Table
                    .Where(r => r.Field<int>("Код должности") == restCode)
                    .CopyToDataTable();
                dataGridView1.DataSource = selectedTable;
            }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
              object oMissing = System.Reflection.Missing.Value;
              object oEndOfDoc = "\\endofdoc"; 
 
              Word._Application oWord;
              Word._Document oDoc;
              oWord = new Word.Application();
              oWord.Visible = true;
              oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
                  ref oMissing, ref oMissing);
 
 
              Word.Table oTable;
              Word.Range wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
              oTable = oDoc.Tables.Add(wrdRng, dataGridView1.RowCount + 1, 5, ref oMissing, ref oMissing); // dataGridView1.RowCount+1(пропуск заголовочной строки)
              oTable.Range.ParagraphFormat.SpaceAfter = 6;
              int r, c;
              string strText;
              for (r = 1; r <= dataGridView1.RowCount; r++) //  <= кол-во ячеек
                  for (c = 1; c <= 5; c++)
                  {
                      oTable.Cell(1, 1).Range.Text = "Header1";
                      oTable.Cell(1, 2).Range.Text = "Header2";
                      oTable.Cell(1, 3).Range.Text = "Header3";
 
 
 
                      foreach (DataGridViewRow row in dataGridView1.Rows)
                      {
                          foreach (DataGridViewCell cell in row.Cells)
                          {
                              strText = Convert.ToString(cell.Value);
                              oTable.Cell(r + 1, c).Range.Text = strText;
                          }
                      }
 
                      strText = "r" + r + "c" + c; // заполнение ячеек координатами
                      oTable.Cell(r+1, c).Range.Text = strText; // r+1 для пропуска 1 строки с заголовками
                  }
              oTable.Rows[1].Range.Font.Bold = 1;
              oTable.Rows[1].Range.Font.Italic = 1;   
          }
        }
 
    }
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.01.2015, 22:10
Ответы с готовыми решениями:

Ошибка при выводе информации из БД
народ помогите при выводе информации из бд выдает вот такую ошибку: line 24=while...

Ошибка при создании word.document: Microsoft Word (0x800A16C1) Object has been deleted.
Фрагмент кода: Set objDoc = Server.CreateObject('Word.Document')...

Ошибка при выводе информации с базы
Здравствуйте! Работаю в Visual Studio (WPF). Нужно подключится к одной таблице БД на MS SQL,...

Ошибка при выводе в Word
Добрый день. Решил вывести данные в ворд, сначала решил потестить вывод. Написал такой код:...

12
1990 / 1161 / 444
Регистрация: 20.12.2014
Сообщений: 3,087
18.01.2015, 19:03 2
А что вы хотите, чтобы у вас напечаталось?
C#
1
2
                      strText = "r" + r + "c" + c; // заполнение ячеек координатами
                      oTable.Cell(r+1, c).Range.Text = strText;
Здесь вы заполнили ячейки координатами и вывели их в отчет. Заменив при этом те данные из грида, которые до этого внесли в ячейки:
C#
1
2
                              strText = Convert.ToString(cell.Value);
                              oTable.Cell(r + 1, c).Range.Text = strText;
Если вы хотите, чтобы у вас были данные, а потом координаты, то замените в одном из этих двух фрагментов оба strText на strText1.
0
0 / 0 / 0
Регистрация: 17.05.2014
Сообщений: 126
19.01.2015, 13:24  [ТС] 3
А просто чтобы данные выводились из datagridview подскажете как сделать?
0
1990 / 1161 / 444
Регистрация: 20.12.2014
Сообщений: 3,087
19.01.2015, 13:32 4
Цитата Сообщение от Andrey26rus Посмотреть сообщение
А просто чтобы данные выводились из datagridview подскажете как сделать?
Они у вас наверно выводятся здесь:
C#
1
2
                              strText = Convert.ToString(cell.Value);
                              oTable.Cell(r + 1, c).Range.Text = strText;
но потом заменяются на координаты, здесь:
C#
1
2
                      strText = "r" + r + "c" + c; // заполнение ячеек координатами
                      oTable.Cell(r+1, c).Range.Text = strText;
Закомментируйте // эти две строчки (или удалите) и проверьте. Если начнут заполняться, то всё нормально. Просто я весь код не смотрел - некогда. Если не будет заполняться - напишите, я весь код посмотрю.
0
0 / 0 / 0
Регистрация: 17.05.2014
Сообщений: 126
19.01.2015, 14:00  [ТС] 5
Закомментировал, теперь выводится одна ошибка: Использование локальной переменной "oWord", которой не присвоено значение строка 57. Что здесь не так?
0
1990 / 1161 / 444
Регистрация: 20.12.2014
Сообщений: 3,087
19.01.2015, 14:23 6
Попробуйте в 56 строке так написать:
C#
1
    Word.Application oWord = new Word.Application();
И 54 тогда не нужна.

Добавлено через 5 минут
Хотя у меня и так, и так работает. Посмотрите может быть "о" в oWord в 57 строке по-русски написано? Или просто скопируйте oWord из предыдущей строки и вставьте в 57.
0
0 / 0 / 0
Регистрация: 17.05.2014
Сообщений: 126
19.01.2015, 14:49  [ТС] 7
Ошибка исчезла, но данные почему то до сих пор не выводятся, выводятся только заголовки Header1, Header2, Header3
0
1990 / 1161 / 444
Регистрация: 20.12.2014
Сообщений: 3,087
19.01.2015, 15:01 8
Ошибка где-то в foreach видимо. У вас в гриде и таблице в Word всё одинаково: в смысле, количество столбцов и строк?
0
0 / 0 / 0
Регистрация: 17.05.2014
Сообщений: 126
19.01.2015, 15:07  [ТС] 9
Да, тут всё совпадает, он видит сколько строк, сколько столбцов, но что то данные не выводит, видно что перебор происходит, но не выводится ничего всё равно в итоге
0
1990 / 1161 / 444
Регистрация: 20.12.2014
Сообщений: 3,087
19.01.2015, 15:13 10
Попробуйте вот так:
C#
1
2
3
4
5
6
7
8
9
10
11
              string strText; // хотя он уже не нужен, оставил, чтобы показать куда размещать код
              oTable.Cell(1, 1).Range.Text = "Header1";
              oTable.Cell(1, 2).Range.Text = "Header2";
              oTable.Cell(1, 3).Range.Text = "Header3";
             for (r = 1; r <= dataGridView1.RowCount; r++) //  <= кол-во ячеек
             {
                  for (c = 1; c <= 5; c++)
                  {
                       oTable.Cell(r + 1, c).Range.Text = Convert.ToString (dataGridView1.Rows[r-1].Cells[c-1].Value);
                  }
              }
1
0 / 0 / 0
Регистрация: 17.05.2014
Сообщений: 126
19.01.2015, 16:07  [ТС] 11
Спасибо большое, заработало всё. А подскажите, пожалуйста ещё, как сделать, чтобы допустим в datagridview 12 столбцов, а в коде ж 5 прописано, что нужно изменить, чтобы 12 столбцов можно было вывести

Добавлено через 22 минуты
Спасибо ещё раз. Разобрался с количеством столбцов. А ещё не подскажете? Можно ли сразу при создании документа с помощью кода изменить ориентацию страницы на альбомную, если можно, то как? А если нельзя, то как подключить шаблон документа?
0
1990 / 1161 / 444
Регистрация: 20.12.2014
Сообщений: 3,087
19.01.2015, 19:16 12
Цитата Сообщение от Andrey26rus Посмотреть сообщение
изменить ориентацию страницы на альбомную
Вставьте в 60 строку (после oDoc = oWord.Documents.Add (...)) такой код:
C#
1
            oDoc.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape;
1
0 / 0 / 0
Регистрация: 17.05.2014
Сообщений: 126
19.01.2015, 19:46  [ТС] 13
Спасибо большое за помощь, работает всё
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2015, 19:46

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ошибка при выводе в Word из DbGrid
Доброго времени суток. Приложение на Rad Studio 10 Seattle. Используются компоненты dbExpress. К...

Ошибка при выводе документа Word
Пытаюсь вывести документ в ворд, он 1 раз вывел (!) а после стал выдавать ошибку Не пойму,...

Автосумма в документе Microsoft Word
Здравствуйте. Cам я в полях Ворда разбираюсь не настолько хорошо, поэтому обращаюсь за помощью... ...

Delphi + Таблица в документе Word - ошибка при форматировании заголовка
Программа создает при помощи объекта WordDocument документ Word, который содержит большое...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.