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、エントリは 1 つだけです...TSID が主キーです。もちろん、重要な場合は .FirstorDefault() コンストラクトを使用できます。重要ではないと思いました。

4

1 に答える 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 に答える