Как вставить строки из datagridview в лист excel
При нажатии кнопки все элементы на datgridview отправляются на лист excel, шаблон начинается с A19 и заканчивается на a49. если есть еще что-то, я хочу скопировать шаблон ниже оригинала и продолжить с A88. Я стараюсь избегать листа 1 и листа 2 и т. д., Все должно быть на листе 1.
Что я уже пробовал:
<pre>private void button1_Click(object sender, EventArgs e) { Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlApp = new Excel.Application(); string filePath = @"C:\MyCedarData\masterquote.xltx"; xlWorkBook = xlApp.Workbooks.Add(filePath); string datestr = DateTime.Now.ToString("dd.MM.yyyy"); string quote = txtName.Text.Replace(" ", " "); string filename = @"C:\MyCedarQuotes\Quote_"; string myfile = filename + quote + "_" + datestr + ".xls"; string salesman = txtEmail.Text.ToUpper(); string customer = txtName.Text.ToUpper(); string custname = txtCustName.Text.ToUpper(); int currentSheet = 1; int cell = 0; int rowsToDisplay = 30; int rowsToStart = 19; int rowsToStart2 = 188; decimal grandTotal = 0; decimal vatPer = 15; for (int row = 0; row < dataGridView1.Rows.Count -1; row++) { if (currentSheet <= xlWorkBook.Sheets.Count) { xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(currentSheet); } else { var xlSheets = xlWorkBook.Sheets as Excel.Sheets; xlWorkSheet = (Excel.Worksheet)xlSheets.Add(xlSheets[xlWorkBook.Sheets.Count], misValue, misValue, misValue); xlWorkSheet.Name = "Sheet" + currentSheet.ToString(); } xlWorkSheet.get_Range("C10", "E10").Value2 = salesman; xlWorkSheet.get_Range("C12", "E12").Value2 = customer; xlWorkSheet.get_Range("C14", "E14").Value2 = custname; 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; for (int column = 0; column < dataGridView1.Columns.Count; column++) { if (column == 2 || column == 5) { xlWorkSheet.Cells[cell + rowsToStart, column + 1] = "'" + dataGridView1.Rows[row].Cells[column].Value.ToString(); } else { xlWorkSheet.Cells[cell + rowsToStart, column + 1] = dataGridView1.Rows[row].Cells[column].Value.ToString(); } } grandTotal += Convert.ToDecimal(dataGridView1.Rows[row].Cells[6].Value); if ((row + 1) % rowsToDisplay == 0) { xlWorkSheet.get_Range("I50", "I50").Value2 = "Sub Total"; xlWorkSheet.get_Range("J50", "J50").Value2 = "=sum(J19:J49)"; currentSheet++; cell = 0; } else if (row + 1 == dataGridView1.Rows.Count - 1) { xlWorkSheet.get_Range("I50", "I50").Value2 = "Sub Total"; xlWorkSheet.get_Range("J50", "J50").Value2 = "=sum(J19:J49)"; xlWorkSheet.get_Range("I51", "I51").Value2 = "Transport"; xlWorkSheet.get_Range("J51", "J51").Value2 = 0; xlWorkSheet.get_Range("I52", "I52").Value2 = "Excl Vat"; xlWorkSheet.get_Range("J52", "J52").Value2 = grandTotal; decimal vatAmount = grandTotal * (vatPer / 100); xlWorkSheet.get_Range("I53", "I53").Value2 = "Vat @15%"; xlWorkSheet.get_Range("J53", "J53").Value2 = vatAmount; xlWorkSheet.get_Range("I54", "I54").Value2 = "Total"; xlWorkSheet.get_Range("J54", "J54").Value2 = grandTotal + vatAmount; } else { cell++; } }
Maciej Los
А что не так с вашим кодом?
shabzo1
Привет. На данный момент он создает два листа. лист 1 и лист2. я хочу, чтобы все это было на одном листе, только я хочу, чтобы он rowstodisplay 30, а затем скопировал шаблон ниже и продолжил работу с bal.
CHill60
Попробуйте прокомментировать эту строку
currentSheet++;и посмотрим, что получится