У меня есть winform, встроенная в C #, которая может экспортировать данные из SQL, а затем позволяет экспортировать их в Excel. Проблема, с которой я столкнулся, заключается в том, что у меня не может быть экспортирована только одна строка таблицы данных, и я получаю сообщение об ошибке, что индекс выходит за пределы допустимого диапазона. Нет никаких проблем, если есть две строки и более. Не могли бы вы помочь мне понять, что должно быть исправлено? Отладка приводит меня к строке - saveFileDialog1.FileName = "Report -" + dataGridView1.Rows [1] .Cells [0] .Value.ToString ();
private void btnExport1_Click(object sender, EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
this.Text = "Exporting...";
_Application excel = new Microsoft.Office.Interop.Excel.Application();
_Workbook workbook = excel.Workbooks.Add(Type.Missing);
_Worksheet worksheet = null;
Range headersRow;
Range allData;
Range updateTimestamp;
saveFileDialog1.FileName = "Report - " + dataGridView1.Rows[1].Cells[0].Value.ToString();
excel.ActiveWindow.Zoom = 80;
try
{
worksheet = workbook.ActiveSheet;
worksheet.Name = "Summary";
worksheet.Cells.WrapText = false;
worksheet.Cells.Font.Name = "Text";
worksheet.Cells.Interior.Color = Color.FromArgb(255, 255, 255);
worksheet.Cells.NumberFormat = "@";
for (int rowIndex = 0; rowIndex < dataGridView1.Rows.Count ; rowIndex++)
{
for (int colIndex = 0; colIndex < dataGridView1.Columns.Count +1; colIndex++)
{
if (rowIndex == 0)
{
worksheet.Cells[rowIndex + 4, colIndex + 1] = dataGridView1.Columns[colIndex].HeaderText;
}
else
{
worksheet.Cells[rowIndex + 4, colIndex + 1] = dataGridView1.Rows[rowIndex-1].Cells[colIndex].Value.ToString();
}
}
}
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
worksheet.Columns.AutoFit();
// worksheet.Application.ActiveWindow.SplitRow = 4;
// worksheet.Application.ActiveWindow.FreezePanes = true;
worksheet.Shapes.AddPicture(@"... logo.png", Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, 0, 0, 180, 39);
allData = worksheet.UsedRange;
allData.Borders.LineStyle = XlLineStyle.xlContinuous;
Microsoft.Office.Interop.Excel.Range ur = worksheet.UsedRange;
Microsoft.Office.Interop.Excel.Range r = worksheet.Cells[4, ur.Columns.Count];
headersRow = worksheet.Range["A4", r];
headersRow.Cells.Font.Bold = true;
headersRow.Cells.Font.Color = Color.FromArgb(255, 255, 255);
headersRow.Cells.Interior.Color = Color.FromArgb(0, 055, 085);
worksheet.Cells[2, 5] = worksheet.Cells[5, 19];
worksheet.Cells[2, 5].Font.Bold = true;
worksheet.Cells[2, 4] = "Report date:";
worksheet.Cells[2, 4].Font.Bold = true;
worksheet.Cells[2, 4].HorizontalAlignment = XlHAlign.xlHAlignRight;
updateTimestamp = worksheet.Range["S5", "S5"].EntireColumn;
updateTimestamp.Delete();