Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何概括将DataGridView导出到Excel文件的代码?_C#_Datagridview - Fatal编程技术网

C# 如何概括将DataGridView导出到Excel文件的代码?

C# 如何概括将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

我想概括以下将DataGriveView内容导出到Excel文件的代码。我的问题在代码的“dataGridView1”部分。我可以在以下代码中进行更改,并概括文件路径、文件名、工作表名等。但在C#类模式下没有DataGriView

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...
}