1

我有以下代码:

        using (CPASEntities ctx = new CPASEntities())
        {
            IWorksheet ws = wb.Worksheets[0];
            ws.Name = "Summary";
            var tsm = (from x in ctx.tblTimesheetMasters
                       where x.TSID == TSID
                       select new
                       {
                           TimesheetID = x.TSID,
                           Comments = x.TSComments,
                           Vendor = x.tblVendor.Vendor_Name,
                           StartDate = x.TSStartDate,
                           Author = x.TSAuthor,
                           Approver = x.TSApprover,
                           Override_Approver = x.TSOverrideApprover,
                           Status = x.tblTimesheetStatu.TSStatusDesc
                       }
                      ).ToList();
            SpreadsheetGear.IRange range = ws.Cells["A1"];
            // I want to copy the entire tsm list to this range, including headings.

        }

正如评论所述,我想将整个列表放入从 A1 开始的 ws 工作表中。我包含代码以防更容易使用不同的构造。FWIW,只有一个条目... TSID 是主键。当然,如果这很重要,我可以使用 .FirstorDefault() 构造。我认为这并不重要。

4

1 回答 1

1

您的范围只有一个单元格。您需要一个足够大的范围来包含列表将填充的所有单元格。

要使用列表填充您的工作表,您可以执行以下操作。

    int iRow = 0;
    int iCol = 0;
    if (tsm.Count() > 0)
    {
      foreach (var prop in tsm[0].GetType().GetProperties())
      {
        ws.Cells[iRow, iCol].Value = prop.Name;
        iCol++;
      }
      iRow++;
      foreach (var t in tsm)
      {
        iCol = 0;
        foreach (var prop in t.GetType().GetProperties())
        {
          ws.Cells[iRow, iCol].Value = prop.GetValue(t, null);
          iCol++;
        }
        iRow++;
      }
    }

如果你想要一个范围,你可以添加这一行。

SpreadsheetGear.IRange range = ws.Cells[0, 0, iRow - 1, iCol - 1];
于 2013-03-16T22:46:27.003 回答