Member 12686587 Ответов: 1

Как мне получить мой 40 item datagrid в 30 строчный шаблон excel и баланс на странице 2


У меня есть шаблон excel со значками и заголовками. Данные из datagrid могут варьироваться от 30 до 60 элементов. Я хочу, чтобы данные начинались с строки 19 до строки 49. если в datagrid есть еще элементы, он должен создать и продолжить страницу 2 (шаблон).На данный момент он работает нормально, но если в datagrid есть более 30 элементов, то он переписывает строки с 31 по 40, что является предложениями.Пожалуйста, помогите,вот мой код.
<pre>private void button1_Click_1(object sender, EventArgs e)
        {
            Excel.Application xlApp ;
            Excel.Workbook xlWorkBook ;
            Excel.Worksheet xlWorkSheet ;
            object misValue = System.Reflection.Missing.Value;
            
            xlApp = new Excel.Application();
            xlWorkBook = xlApp.Workbooks.Open(@"C:\CedarData\masterquote.xlsx", misValue, false, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
            
            //int i = 1;
            //int j = 1;
            
            string datestr = DateTime.Now.ToShortDateString();
            //string colName = dataGridView1.Columns[j].HeaderText;
            string filename = @"C:\CedarData\CedarQuotes\Quote_" + txtName.Text.Replace(" ", "") + "_" + datestr + ".xls";
            string quote = txtName.Text.Replace(" ", "") + "_" + datestr;
            string salesman = txtEmail.Text.ToUpper();
            string customer = txtName.Text.ToUpper();
            
            // Storing Each row and column value to excel sheet   
            for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
               {

                for (int j = 0; j < dataGridView1.Columns.Count; j++)
                {
                    //string value3 = dataGridView1.Rows[i].Cells[j].Value.ToString();
                    if (j == 2 || j == 5)
                    {
                        xlWorkSheet.Cells[i + 19, j + 1] = "'" + dataGridView1.Rows[i].Cells[j].Value.ToString();
                    }
                    else
                    {
                        xlWorkSheet.Cells[i + 19, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
                    } 
                    xlWorkSheet.get_Range("C10", "E10").Value2 = salesman;
                    xlWorkSheet.get_Range("C12", "E12").Value2 = customer;
                    xlWorkSheet.get_Range("C12", "E12").Font.Bold = true;
                    xlWorkSheet.get_Range("C12", "E12").Font.Bold = true;
                    xlWorkSheet.get_Range("H12", "I12").Value2 = DateTime.Now;
                    xlWorkSheet.get_Range("H10", "I10").Value2 = quote;
                    
                }

            }   

            xlWorkBook.SaveAs(filename, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit();

            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);

            MessageBox.Show("Excel file created , you can find the file c:\\quote.xls");
        }


Что я уже пробовал:

скопируйте xlWorksheet в xlWorksheet2 используйте get_item(2)

1 Ответов

Рейтинг:
1

Graeme_Grant

Способ исправить это-установить верхние и нижние колонтитулы страниц в Excel, тогда вам не придется беспокоиться о том, сколько строк на странице:
* Верхние и нижние колонтитулы на листе-Excel[^]

Другой способ-установить свой заголовок в первых нескольких строках, установить, чтобы эти строки повторялись на каждой странице, а затем снова вам не нужно беспокоиться о том, сколько строк на странице:
* Повторение определенных строк или столбцов на каждой печатной странице - офисной поддержки[^]


Member 12686587

спасибо, Грэм. Могу ли я попросить вас показать мне пример использования c#? Я новичок и буду признателен вам за помощь. Шаблон уже имеет заголовки. как установить нижние колонтитулы.

Graeme_Grant

Используйте собственный рекордер макросов Excel, чтобы показать вам, как это сделать: Автоматизация задач с помощью макросов - Excel и[^]

Начните запись, следуйте инструкциям по созданию заголовка, остановите запись. Теперь перейдите в Редактор Excel VBA (macro), и у вас есть пример кода. Это то, что я буду делать, чтобы создать любой код для вас. Лучше, если вы научитесь делать так, чтобы вы могли учиться для других задач. Те же слова для MS Word.