Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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# 将多行从已读文件导出到Excel_C#_Excel_Winforms - Fatal编程技术网

C# 将多行从已读文件导出到Excel

C# 将多行从已读文件导出到Excel,c#,excel,winforms,C#,Excel,Winforms,我有一些代码,目前正用于从Excel电子表格中获取一行数据,并将其转换为另一个电子表格发送给我的客户。我要做的是让这段代码在最终的电子表格上返回多行。现在我正在这样做: using (OleDbConnection conn = new OleDbConnection(pathConn)) { for (int i = 0; i < excelSheets.Length; i++) { OleDbDataAdapter adapter = new OleDb

我有一些代码,目前正用于从Excel电子表格中获取一行数据,并将其转换为另一个电子表格发送给我的客户。我要做的是让这段代码在最终的电子表格上返回多行。现在我正在这样做:

using (OleDbConnection conn = new OleDbConnection(pathConn))
{
    for (int i = 0; i < excelSheets.Length; i++)
    {
        OleDbDataAdapter adapter = new OleDbDataAdapter("Select * from [" +
        excelSheets[i] + "]", conn);
        System.Data.DataTable dt = new System.Data.DataTable();

        adapter.Fill(dt);
        tring dtBrokerName = dt.Rows[0].Field<string>("ProducerName");                   

        //[Sets numerous fields]

        // create final output report based on imported data
        GenerateExcelData(dtBrokerName, dtExpirationDate, dtPolicyNumber, 
        dtCurrentPrice, tier, usage, city, dtcValue);
    }
}
它利用由第三方开发的此类:

class CreateExcelDoc
{
    private Excel.Application app = null;
    private Excel.Workbook workbook = null;
    private Excel.Worksheet worksheet = null;
    private Excel.Range workSheet_range = null;

    public CreateExcelDoc()
    {
        createDoc();
    }

    public void createDoc()
    {
        try
        {
            app = new Excel.Application();
            app.Visible = true;
            workbook = app.Workbooks.Add(1);
            worksheet = (Excel.Worksheet)workbook.Sheets[1];
        }
        catch (Exception e)
        {
            Console.Write("Error");
        }
        finally
        {
        }
    }

    public void createHeaders(int row, int col, string htext, string cell1,
    string cell2, int mergeColumns, string b, bool font, double size, string
    fcolor)
    {
        worksheet.Cells[row, col] = htext;
        workSheet_range = worksheet.get_Range(cell1, cell2);
        workSheet_range.Merge(mergeColumns);

        switch (b)
        {
            case "Black":
                workSheet_range.Interior.Color = Color.Black.ToArgb();
                break;
            case "Gray":
                workSheet_range.Interior.Color = Color.Gray.ToArgb();
                break;
            case "Red":
                workSheet_range.Interior.Color = Color.Red.ToArgb();
                break;
            case "Green":
                workSheet_range.Interior.Color = Color.ForestGreen.ToArgb();
                break;
            case "Yellow":
                workSheet_range.Interior.Color = Color.LightYellow.ToArgb();
                break;
            default:
                //  workSheet_range.Interior.Color = System.Drawing.Color..ToArgb();
                break;
        }

        workSheet_range.Borders.Color = Color.Black.ToArgb();
        workSheet_range.Font.Bold = font;
        workSheet_range.ColumnWidth = size;

        if (fcolor.Equals(""))
        {
            workSheet_range.Font.Color = Color.White.ToArgb();
        }
        else
        {
            workSheet_range.Font.Color = Color.Black.ToArgb();
        }
    }

    public void addData(int row, int col, string data,
        string cell1, string cell2, string format)
    {
        worksheet.Cells[row, col] = data;
        workSheet_range = worksheet.get_Range(cell1, cell2);
        workSheet_range.Borders.Color = Color.Black.ToArgb();
        workSheet_range.NumberFormat = format;
    }
}
我试图让程序读取我导入的Excel文件中的每一行,并在导出报告中逐行返回值。我试图改变:

BatchRenewalReport.addData(2, 1, dtBrokerName, "A2", "A2", "");  

到目前为止,线路还没有成功。

在你的位置上,我会放弃那个课程,使用ePlus。一个简单的
工作表.LoadFromDataTable
LoadFromCollection
将创建一个包含数据和标题的表。然后,您可以根据需要应用样式、重命名标题等。我认为它甚至尊重数据注释属性,因此您可以为每个列或类属性设置
DisplayName
属性。pplus绝对不是一个坏选项,我在许多应用程序中使用它,效果非常好。这正是我得到的感觉。谢谢你的建议,我将把它转换成EPPlus。实际上,不幸的是,EPPlus似乎不起作用,因为我需要能够同时读取.xls和xlsx文件。在你的位置上,我会放弃那个类,使用EPPlus。一个简单的
工作表.LoadFromDataTable
LoadFromCollection
将创建一个包含数据和标题的表。然后,您可以根据需要应用样式、重命名标题等。我认为它甚至尊重数据注释属性,因此您可以为每个列或类属性设置
DisplayName
属性。pplus绝对不是一个坏选项,我在许多应用程序中使用它,效果非常好。这正是我得到的感觉。谢谢你的建议,我将把它转换成EPPlus。实际上,不幸的是,EPPlus似乎无法工作,因为我需要能够同时读取.xls和xlsx文件。
BatchRenewalReport.addData(2, 1, dtBrokerName, "A2", "A2", "");