在我的应用程序中我将DataGridView数据导出到Excel工作表现在我想将组合框和文本框选择的值传递给excel工作表,我必须将我的Excel工作表的标题作为我的Windows应用程序的报告给我如何做到这一点?
有人可以帮我吗?
我有将datagridview数据导出到excel的代码:
private void btnexcel_Click(object sender, EventArgs e)
{
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
int i = 0;
int j = 0;
for (i = 0; i <= dataGridView1.RowCount - 1; i++)
{
for (j = 0; j <= dataGridView1.ColumnCount - 1; j++)
{
DataGridViewCell cell = dataGridView1[j, i];
xlWorkSheet.Cells[i + 1, j + 1] = cell.Value;
}
}
xlWorkBook.SaveAs("csharp.net-informations.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("Excel file created , you can find the file c:\\csharp.net-informations.xls");
}
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();
}
}
}
}
答案 0 :(得分:0)
在您获取DataGridView
单元格信息的代码中,Value属性为comboBox单元格而不是comboBox中的DisplayMember提供ValueMember。相反,您需要访问FormattedValue(您可以实际用于所有单元格)。
以下是一些显示如何执行此操作的代码(以及其他一些小改进):
for (int i = 0; i < dataGridView1.RowCount; i++)
{
if (!dataGridView1.Rows[i].IsNewRow)
{
for (int j = 0; j < dataGridView1.ColumnCount; j++)
{
DataGridViewCell cell = dataGridView1[j, i];
MessageBox.Show(cell.FormattedValue.ToString());
}
}
}
我只需要使用FormattedValue并使用MessageBox显示它,但是您可以将它分配给您的单元格。
我还使用了一个稍微紧凑的循环语法,并添加了一个检查网格的NewRow(它可以包含可能破坏事物的空值)。
另外,要知道的一件有用的事情是,一旦你拥有了单元格,就可以获得单元格的实际类型:
if (cell is DataGridViewComboBoxCell)
在解决问题时,这为您提供了更多选择。作为最终选项,您甚至可以访问EditingControl(ComboBoxColumn中的实际DropDown),这又提供了更多选项。
在你的情况下你不应该这样做,但是它们对于了解它们是有用的。
答案 1 :(得分:0)
private void ExportarDataGridViewExcel(DataGridView grd)
{
SaveFileDialog fichero = new SaveFileDialog();
fichero.Filter = "Excel (*.xls)|*.xls";
fichero.FileName = "export.xls";
if (fichero.ShowDialog() == DialogResult.OK)
{
Microsoft.Office.Interop.Excel.Application aplicacion;
Microsoft.Office.Interop.Excel.Workbook libros_trabajo;
Microsoft.Office.Interop.Excel.Worksheet hoja_trabajo;
aplicacion = new Microsoft.Office.Interop.Excel.Application();
libros_trabajo = aplicacion.Workbooks.Add();
hoja_trabajo =
(Microsoft.Office.Interop.Excel.Worksheet)libros_trabajo.Worksheets.get_Item(1);
// changing the name of active sheet
hoja_trabajo.Name = "Exported from App";
// storing header part in Excel
for (int i = 1; i < grd.Columns.Count + 1; i++)
{
hoja_trabajo.Cells[1, i] = grd.Columns[i - 1].HeaderText;
}
//Recorremos el DataGridView rellenando la hoja de trabajo
for (int i = 1; i < grd.Rows.Count + 1; i++)
{
for (int j = 0; j < grd.Columns.Count; j++)
{
hoja_trabajo.Cells[i + 1, j + 1] = grd.Rows[i-1].Cells[j].Value.ToString();
}
}
libros_trabajo.SaveAs(fichero.FileName,
Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal);
libros_trabajo.Close(true);
aplicacion.Quit();
}
}
//in the click event of button1
private void button1_Click(object sender, EventArgs e)
{
ExportarDataGridViewExcel(dataGridView1);
}