Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2019, 07:20   #1
SynsWor
 
Регистрация: 05.04.2017
Сообщений: 7
По умолчанию Экспорт из datagrid в word

Всем привет! У меня есть код для экспорта данных с datagrid в таблицу word. У меня возникла проблема с тем, что в таблице создается лишняя последняя строка, я не понимаю как её удалить или сделать так, чтобы она не добавлялась. Уже весь код перебрал (код нашёл в интернете), но никак не пойму в чём проблема. Кто может подсказать?
Код:
namespace из_datagrid_в_word
{
    public partial class Form1 : Form
    {
        SqlConnection sqlCon = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\SynsWor\Desktop\Диплом\BD\SredstvaDB.mdf;Integrated Security=True;Connect Timeout=30");
        public Form1()
        {
            InitializeComponent();
        }

        public void Export_Data_To_Word(DataGridView DGV, string filename)
       {
           
        if (DGV.Rows.Count != 0)
        {
            int RowCount = DGV.Rows.Count;
            int ColumnCount = DGV.Columns.Count;
            Object[,] DataArray = new object[RowCount +1 , ColumnCount + 1 ];

            //Добавление строк и ячеек
            int r = 0;
            for (int c = 0; c <= ColumnCount - 1; c++)
            {
                for (r = 0; r <= RowCount - 1; r++)
                {
                    DataArray[r, c] = DGV.Rows[r].Cells[c].Value;
                }
            } 

            Word.Document oDoc = new Word.Document();
            oDoc.Application.Visible = true;

            //Ориентация листа
            oDoc.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape;


            dynamic oRange = oDoc.Content.Application.Selection.Range;
            string oTemp = "";
            for (r = 0; r <= RowCount - 1; r++)
            {
                for (int c = 0; c <= ColumnCount - 1; c++)
                {
                    oTemp = oTemp + DataArray[r, c] + "\t";

                }
            }

            //Формат таблицы
            oRange.Text = oTemp;
            object oMissing = Missing.Value;
            object Separator = Word.WdTableFieldSeparator.wdSeparateByTabs;
            object ApplyBorders = true;
            object AutoFit = true;
            object AutoFitBehavior = Word.WdAutoFitBehavior.wdAutoFitContent;
   


                oRange.ConvertToTable(ref Separator, ref RowCount, ref ColumnCount,
                                  Type.Missing, Type.Missing, ref ApplyBorders,
                                  Type.Missing, Type.Missing, Type.Missing,
                                  Type.Missing, Type.Missing, Type.Missing,
                                  Type.Missing, ref AutoFit, ref AutoFitBehavior, Type.Missing);

            oRange.Select();

            oDoc.Application.Selection.Tables[1].Select();
            oDoc.Application.Selection.Tables[1].Rows.AllowBreakAcrossPages = 0;
            oDoc.Application.Selection.Tables[1].Rows.Alignment = 0;
            oDoc.Application.Selection.Tables[1].Rows[1].Select();
            oDoc.Application.Selection.InsertRowsAbove(1);
            oDoc.Application.Selection.Tables[1].Rows[1].Select();

            //Стиль заголовка таблицы
            oDoc.Application.Selection.Tables[1].Rows[1].Range.Bold = 2;
            oDoc.Application.Selection.Tables[1].Rows[1].Range.Font.Name = "Tahoma";
            oDoc.Application.Selection.Tables[1].Rows[1].Range.Font.Size = 14;

            //add header row manually
            for (int c = 0; c <= ColumnCount - 1; c++)
            {
                oDoc.Application.Selection.Tables[1].Cell(1, c + 1).Range.Text = DGV.Columns[c].HeaderText;
            }

            //Стили таблицы
            oDoc.Application.Selection.Tables[1].Rows[1].Select();
            oDoc.Application.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;
            oDoc.Application.Selection.Tables[1].Borders.Enable = 1;




                //Текст шапки
                foreach (Word.Section section in oDoc.Application.ActiveDocument.Sections)
            {
                Word.Range headerRange = section.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
                headerRange.Fields.Add(headerRange, Word.WdFieldType.wdFieldPage);
                headerRange.Text = "Заявка на закупку картриджа";
                headerRange.Font.Size = 16;
                headerRange.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;


                }

                //Сохранение файла

                oDoc.SaveAs(filename, ref oMissing, ref oMissing, ref oMissing,
            ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
            ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
            ref oMissing, ref oMissing);
            }  
           }
        private void button1_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();

            sfd.Filter = "Word Documents (*.docx)|*.docx";

            sfd.FileName = "Запрос на покупку.docx";

            if (sfd.ShowDialog() == DialogResult.OK)
            {
                Export_Data_To_Word(dataGridView1, sfd.FileName);
            }
        }
SynsWor вне форума Ответить с цитированием
Старый 07.12.2021, 22:19   #2
Артур Кустяев
Новичок
Джуниор
 
Регистрация: 07.12.2021
Сообщений: 1
По умолчанию

Пустая строка создается из-за этого куска кода:

Код:
string oTemp = "";
for (r = 0; r <= RowCount - 1; r++)
{
     for (int c = 0; c <= ColumnCount - 1; c++)
     {
          oTemp = oTemp + DataArray[r, c] + "\t";
     }
}

oRange.Text = oTemp;
При последней итерации цикла в конце строки добавляется "\t" из-за чего и создается новая строка. Я исправил этот кусок:

Код:
 
ArrayList data = new ArrayList();
for (int r = 0; r < RowCount; r++)
     for (int c = 0; c < ColumnCount; c++)
          data.Add(DataArray[r, c]);
oRange.Text = string.Join("\t", data.ToArray());
Артур Кустяев вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт в Word Ist Помощь студентам 1 01.06.2011 19:52
Экспорт в Word Jantar Общие вопросы Delphi 2 27.03.2011 16:13
Экспорт в Word Yiguoliang Общие вопросы Delphi 1 10.02.2011 16:33
экспорт в word AD_min Общие вопросы Delphi 4 05.12.2008 14:17
Экспорт в Word Constellation БД в Delphi 5 15.04.2008 18:47