创建数据列而不是行

时间:2017-10-31 20:05:06

标签: c# excel epplus

我想将数据插入到Excel中而不是行中,如下所示:

 ---------------
| Name1 | Name2 |
| Qty1  | Qty2  |
| Qtys1 | Qtys2 |
| Per1  | Per2  |
| Old1  | Old2  |
 ---------------

这就是我目前所拥有的:

        using (ExcelPackage excel = new ExcelPackage())
        {
            ExcelWorksheet ws;

            ws = excel.Workbook.Worksheets.Add("Chart");

            var table = ws.Cells["B4"].LoadFromCollection(
                dmr,
                false,
                OfficeOpenXml.Table.TableStyles.Light15,
                BindingFlags.Public,
                new MemberInfo[]
                {
                    typeof(DMR).GetProperty("Name"),
                    typeof(DMR).GetProperty("Qty"),
                    typeof(DMR).GetProperty("Qtys"),
                    typeof(DMR).GetProperty("Per"),
                    typeof(DMR).GetProperty("Old")
                });

目前显示的数据如下:

 ------------------------------------
| Name1 | Qty1 | Qtys1 | Per1 | Old1 |
| Name2 | Qty2 | Qtys2 | Per2 | Old2 |
 ------------------------------------

是否有一个设置,你告诉它做行而不是列,还是需要额外的代码?

1 个答案:

答案 0 :(得分:1)

不幸的是,没有简单的方法可以使用EPPlus以这种方式转换数据,但是只要数据大小不是太大,以下方法就可以工作:

using (ExcelPackage excel = new ExcelPackage(file))
{
    ExcelWorksheet ws;
    DataTable dt = new DataTable();

    // Get the worksheet
    ws = excel.Workbook.Worksheets["Chart"];

    // Create as many columns as there are rows
    for (int i = 0; i < ws.Dimension.End.Row; i++) {
        dt.Columns.Add(i.ToString());
    }

    // Go through each column and create a new row of data
    for (int i = 1; i <= ws.Dimension.End.Column; i++) {
        var row = dt.NewRow();
        for (int j = 1; j <= ws.Dimension.End.Row; j++) {
            row[j-1] = ws.Cells[j, i].Value;
        }
        dt.Rows.Add(row);
    }
}

请注意,列标题只是1 | 2 | 3 | etc,可以在第一个for循环中更改。