C# 如何概括将DataGridView导出到Excel文件的代码?
我想概括以下将DataGriveView内容导出到Excel文件的代码。我的问题在代码的“dataGridView1”部分。我可以在以下代码中进行更改,并概括文件路径、文件名、工作表名等。但在C#类模式下没有DataGriViewC# 如何概括将DataGridView导出到Excel文件的代码?,c#,datagridview,C#,Datagridview,我想概括以下将DataGriveView内容导出到Excel文件的代码。我的问题在代码的“dataGridView1”部分。我可以在以下代码中进行更改,并概括文件路径、文件名、工作表名等。但在C#类模式下没有DataGriView private void btnExport_Click(object sender, EventArgs e) { Microsoft.Office.Interop.Excel._Application app = new Microsoft
private void btnExport_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
worksheet = workbook.Sheets["Sheet1"];
worksheet = workbook.ActiveSheet;
worksheet.Name = "pmInfo";
for (int i = 1; i < dataGridView1.Columns.Count+1; i++)
{
worksheet.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText;
}
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
}
}
var saveFileDialoge = new SaveFileDialog();
saveFileDialoge.FileName = "Output";
saveFileDialoge.DefaultExt = ".xlsx";
if (saveFileDialoge.ShowDialog()==DialogResult.OK)
{
workbook.SaveAs(saveFileDialoge.FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
}
}
private void btnExport\u单击(对象发送方,事件参数e)
{
Microsoft.Office.Interop.Excel.\u应用程序app=新的Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.\u工作簿=app.Workbooks.Add(Type.Missing);
Microsoft.Office.Interop.Excel.\u工作表=null;
工作表=工作簿。工作表[“Sheet1”];
工作表=工作簿.ActiveSheet;
工作表。Name=“pmInfo”;
for(int i=1;i
我使用使用System.Windows.Forms代码>作为参考,但问题存在。
请注意,我直接填充DGV,不使用DataTable。尝试在DataGridView上创建扩展,例如:
public static class DataGridViewExtensions
{
public static void ExportViewToWorksheet(this DataGridView dgv, Microsoft.Office.Interop.Excel._Worksheet worksheet)
{
if (dgv == null || worksheet == null) return;
for (int i = 1; i < dgv.Columns.Count + 1; i++)
{
worksheet.Cells[1, i] = dgv.Columns[i - 1].HeaderText;
}
for (int i = 0; i < dgv.Rows.Count; i++)
{
for (int j = 0; j < dgv.Columns.Count; j++)
{
worksheet.Cells[i + 2, j + 1] = dgv.Rows[i].Cells[j].Value.ToString();
}
}
}
}
我不确定我是否正确理解了这个问题,但基于此,我建议在将数据馈送到DataGridView之前,将文本框中的数据收集到一个单独的集合中。然后可以将该集合用于DataGridView和excel导出
可以使用类对网格中的每一行建模:
public class MyData
{
public string Value1 { get; set; }
public string Value2 { get; set; }
}
然后,在收集“这些文本框中的所有信息”的代码中。您可以初始化稍后将使用的列表:
// this is where you gather the data from the textboxes
var dataCollection = new List<MyData>();
// execute this in a loop, to populate your 'dataCollection'
dataCollection.Add(new MyData {
Value1 = "value1", // depends on how your data is populated...
Value2 = "value2"
});
// use dataCollection to populate your DataGridView, more info here: https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datagridview.datasource?view=net-5.0
//这是从文本框收集数据的地方
var dataCollection=新列表();
//在循环中执行此操作,以填充“数据收集”
添加(新的MyData){
Value1=“Value1”,//取决于数据的填充方式。。。
Value2=“Value2”
});
//使用dataCollection填充DataGridView,更多信息请参见:https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datagridview.datasource?view=net-5.0
然后,您可以创建一个可重用函数,用于导出到excel:
private void btnExport_Click(object sender, EventArgs e)
{
ExportToExcel(dataCollection);
}
private void ExportToExcel(List<MyData> data) // -> reusable piece
{
// your worksheet and workbook code...
// add column headers like this
worksheet.Cells[1, 1] = "Value1";
// add rows like this
for (int i = 0; i < data.Count; i++)
{
worksheet.Cells[i+2, 1] = data.Value1;
worksheet.Cells[i+2, 2] = data.Value2;
}
// your file saving code...
}
private void btnExport\u单击(对象发送方,事件参数e)
{
ExportToExcel(数据收集);
}
专用void ExportToExcel(列表数据)/->可重复使用件
{
//您的工作表和工作簿代码。。。
//像这样添加列标题
工作表。单元格[1,1]=“Value1”;
//添加这样的行
for(int i=0;i
您的“DataGridView”是如何填充的?是否有对象用作数据源?否,我使用一些文本框填充DGV。按下一个按钮,这些文本框中的所有信息都会被收集并放入DGV。我将您的代码粘贴到我的类中。类代码中的DataGridView有红色下划线。它不能被宣布public static void ExportViewToWorksheet(此DataGridView dgv,Microsoft.Office.Interop.Excel.\u工作表工作表)
尝试在文件顶部添加“using system.Windows.Forms”。csI已使用system.Windows.Forms添加了代码>之前,但问题仍然存在。请确保您正在利用“System.Windows.Forms”中的“S”,它应该可以工作。
private void btnExport_Click(object sender, EventArgs e)
{
ExportToExcel(dataCollection);
}
private void ExportToExcel(List<MyData> data) // -> reusable piece
{
// your worksheet and workbook code...
// add column headers like this
worksheet.Cells[1, 1] = "Value1";
// add rows like this
for (int i = 0; i < data.Count; i++)
{
worksheet.Cells[i+2, 1] = data.Value1;
worksheet.Cells[i+2, 2] = data.Value2;
}
// your file saving code...
}