C# 未从dataGridView将列名正确导出到excel
我正在尝试将数据从dataGridView导出到excel。它工作正常,但我无法正确导出列名。问题是列名应该是:id,它是idDataGridViewTextBoxColumn。另一个问题是数据库中的第一个条目没有导出。我的意思是,它不放我在db中的第一个条目,而是放列名,然后,它只放第二个条目,然后是第三个条目,依此类推。谢谢C# 未从dataGridView将列名正确导出到excel,c#,sql,excel,datagridview,C#,Sql,Excel,Datagridview,我正在尝试将数据从dataGridView导出到excel。它工作正常,但我无法正确导出列名。问题是列名应该是:id,它是idDataGridViewTextBoxColumn。另一个问题是数据库中的第一个条目没有导出。我的意思是,它不放我在db中的第一个条目,而是放列名,然后,它只放第二个条目,然后是第三个条目,依此类推。谢谢 private void button3_Click_1(object sender, EventArgs e) { var
private void button3_Click_1(object sender, EventArgs e)
{
var connString = (@"Data Source=" + Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName + @"\Angajati.sdf");
using (var conn = new SqlCeConnection(connString))
{
try
{
conn.Open();
var query = "SELECT * FROM info ";
var command = new SqlCeCommand(query, conn);
var dataAdapter = new SqlCeDataAdapter(command);
var dataTable = new DataTable();
dataAdapter.Fill(dataTable);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
Int16 i, j;
xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
for (i = 0; i <= dataGridView1.RowCount - 2; i++)
{
for (j = 0; j <= dataGridView1.ColumnCount - 1; j++)
{
xlWorkSheet.Cells[i + 1, j + 1] = dataGridView1[j, i].Value.ToString();
}
}
//adds column names to excel
string[] colNames = new string[dataGridView1.Columns.Count];
int col = 0;
foreach (DataGridViewColumn dc in dataGridView1.Columns)
colNames[col++] = dc.Name;
char lastColumn = (char)(65 + dataGridView1.Columns.Count - 1);
xlWorkSheet.get_Range("A1", lastColumn + "1").Value2 = colNames;
xlWorkSheet.get_Range("A1", lastColumn + "1").Font.Bold = true;
xlWorkSheet.get_Range("A1", lastColumn + "1").VerticalAlignment
= Excel.XlVAlign.xlVAlignCenter;
xlWorkBook.SaveAs(@"C:\Users\Andrei\Documents\Visual Studio 2010\Projects\Stellwag\Stellwag\db.xls", 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("Salvat cu succes");
}
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
}
finally
{
GC.Collect();
}
}
首先,您必须找出问题发生的位置: 从GridView获取数据 将数据发送到excel
使用调试程序,设置断点并检查列名问题的中间值,如dataTable和colNames 替换此项:
foreach (DataGridViewColumn dc in dataGridView1.Columns)
colNames[col++] = dc.Name;
为此:
foreach (DataGridViewColumn dc in dataGridView1.Columns)
colNames[col++] = dc.HeaderText;
更新:对于缺少的第一行,进行以下更改:
for (i = 0; i <= dataGridView1.RowCount - 2; i++)
{
for (j = 0; j <= dataGridView1.ColumnCount - 1; j++)
{
//xlWorkSheet.Cells[i + 1, j + 1] = dataGridView1[j, i].Value.ToString();
xlWorkSheet.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();
}
}
这样很有魅力。剩下的唯一问题是它没有得到数据库中的第一个条目,只有第二个条目,因为第一个条目被替换为列名。为什么?