programing

텔레릭을 사용하여 Excel(XLSX)로 내보낼 때 컬렉션을 해석하는 방법은 무엇입니까?

lastcode 2023. 8. 30. 21:45
반응형

텔레릭을 사용하여 Excel(XLSX)로 내보낼 때 컬렉션을 해석하는 방법은 무엇입니까?

시나리오


Windows 양식용 텔레릭 UI를 사용하고 있습니다.

RadGridView를 사용하여 이름이 지정된 사용자 지정 유형을 표시합니다.MarketInfo:

Public NotInheritable Class MarketInfo

    ...
    Public ReadOnly Property Participants As ReadOnlyCollection(Of ParticipantInfo)
        Get
            Return Me.GetParticipants()
        End Get
    End Property
    ...

End Class

텍스트 및 부울 속성만 포함하고 있습니다.Participants다른 사용자 지정 유형의 컬렉션을 반환하는 속성:

Private Function GetParticipants(ByVal market As XElement) As ReadOnlyCollection(Of ParticipantInfo)
    Dim participantInfoList As New List(Of ParticipantInfo)
    For Each participantNode As XElement In market...<participant>
        participantInfoList.Add(New ParticipantInfo(participantNode))
    Next
    Return New ReadOnlyCollection(Of ParticipantInfo)(participantInfoList)
End Function

그리고 이것이 전체입니다.ParticipantInfo클래스:

Public NotInheritable Class ParticipantInfo

    Private ReadOnly participantElement As XElement

    Public ReadOnly Property Name As String
        Get
            Return participantElement.@name
        End Get
    End Property

    Public ReadOnly Property Id As String
        Get
            Return participantElement.@id
        End Get
    End Property

    Public ReadOnly Property Odds As String
        Get
            Return participantElement.@odds
        End Get
    End Property

    Public ReadOnly Property OddsDecimal As String
        Get
            Return participantElement.@oddsDecimal
        End Get
    End Property

    Public ReadOnly Property LastUpdateDate As String
        Get
            Return participantElement.@lastUpdateDate
        End Get
    End Property

    Public ReadOnly Property LastUpdateTime As String
        Get
            Return participantElement.@lastUpdateTime
        End Get
    End Property

    Public ReadOnly Property Handicap As String
        Get
            Return participantElement.@handicap
        End Get
    End Property

    Public Sub New(ByVal participantElement As XElement)
        Me.participantElement = participantElement
    End Sub

    Private Sub New()
    End Sub

End Class

그래서 기본적으로 나는 한 컬렉션을 내보내야 합니다.ParticipantInfo유형, 이 유형은 Excel로 표시되어야 합니다.

음, 그래서.RadGridView열을 숨깁니다.Participants(수집이기 때문에) 표현할 수 없기 때문에 해당 컬렉션을 다른 데이터 소스로 로드합니다.RadGridView.

이를 더 잘 이해하기 위해 다음과 같은 결과가 나왔습니다.

enter image description here

문제


저의 문제는 이것을 엑셀 파일(XLSX)로 해석하는 방법을 모른다는 것입니다.

이 코드를 내보내고 있습니다.MarketInfo그리드 내용:

Dim exporter As New ExportToExcelML(rdg)
With exporter
    .HiddenColumnOption = HiddenOption.ExportAlways
    .HiddenRowOption = HiddenOption.ExportAlways
    .ExportVisualSettings = True
    .SheetMaxRows = ExcelMaxRows._65536
    .SheetName = "xxxxxxxx"
    .SummariesExportOption = SummariesOption.ExportAll
    .PagingExportOption = PagingExportOption.AllPages
    .FileExtension = ".xlsx"
    .RadGridViewToExport = rdg
    .ChildViewExportMode = ChildViewExportMode.ExportAllViews

End With

exporter.RunExport(fileName)

그러나 생성된 파일에는 참가자의 유형 이름만 포함됩니다.

...
<Data ss:Type="String">System.Collections.ObjectModel.ReadOnlyCollection`1[WilliamHillLeecher.Leecher.Types.ParticipantInfo]</Data></Cell></Row>
...

enter image description here

각각 하나씩 Excel 페이지가 생성될 것으로 예상했습니다.MarketInfo누락된 속성들로.

저는 Excel 사용법과 Excel 용어에 익숙하지 않습니다. 시트 페이지에서 컬렉션을 얼마나 일반적으로 나타낼 수 있는지 잘 모르겠습니다. 새 시트 페이지를 만들고 해당 셀에 "연결"하면 될 것 같습니다.

제가 지원서에 표시한 것과 동일한 정보를 엑셀 파일에 표시하고 싶습니다.

질문.


텔레릭이 관련 라이브러리를 수출하는데 어떻게 그럴 수 있습니까?

텔레릭 라이브러리를 사용할 수 없는 경우 다른 타사 무료 라이브러리로 어떻게 할 수 있습니까?

(이것으로 저는 다른 종류의 제안을 받아들일 수 있다는 것을 말하고 있습니다. 하지만 좀 더 집중적인 Excel 라이브러리에 대해 알고 있다는 것을 명심하십시오. 어쨌든 저는 여전히 어떤 lib로도 이 작업을 수행하는 방법을 이해하지 못할 것입니다... 아마도 Excel UI를 사용하여 컬렉션을 추가/표현하는 동일한 작업을 수행할 수 있는 방법에 대한 잘못된 이해 때문입니다.

  1. RadGridView를 계층 구조로 메모리에 채우고 다른 사용자처럼 내보냅니다. http://www.telerik.com/forums/radgrid-hierarchy-export-to-excel-showing-exporting-master-table-rows-but-detail-rows-are-blank-lines

  2. XML, ClosedX를 사용하여 생성되는 Excel XML을 제어할 수 있습니다.ML은 OpenXML에 비해 작업하기가 매우 쉽습니다.

  3. 다른 많은 옵션들이 있고,

  4. 지원 요청을 텔레릭으로 여는 것이 그리드 보기 내보내기 옵션의 세부 정보별 시트 페이지에 대한 옵션이 있는지 확인하는 가장 빠른 방법일 수 있습니다.

오픈 소스 라이브러리를 사용하려면 다음을 시도하십시오. EPLUS 프로젝트에서 eplus.dll을 참조하면 다음 코드가 원하는 방식으로 데이터를 xlsx 형식으로 내보낼 수 있습니다.

using OfficeOpenXml.Drawing;
using OfficeOpenXml.Drawing.Chart;
using OfficeOpenXml.Style;
using OfficeOpenXml.Table;
using OfficeOpenXml.Table.PivotTable;

namespace OfficeOpenXml
{
    public static class ExcelHelper
    {

        public static void Save(dynamic Table, string path)
        {
            var excel = CreateReport(Table);
            excel.SaveAs(path);
        }
        static void Save(this ExcelPackage excel, string path)
        {
            excel.SaveAs(path);
        }
        static ExcelWorksheet Export(ExcelPackage excel, dynamic Table, out ExcelRange range) // here it is your grid
        {
            var sheet = excel.Workbook.Worksheets.Add("Master_Data");
            int row=0, col=0;
            foreach (dynamic dc in Table.Columns)
            {
                sheet.Cell(row, col++).Value = dc.Caption;
            }
            row++;
            col = 0;

            foreach (dynamic dr in Table.Rows)
            {
                foreach (object value in dr.ItemArray)
                {
                    sheet.Cell(row, col++).Value = value;
                }
                row++;
                col = 0;
            }
            range= sheet.Cells[0, 0, row - 1,  Table.Columns.Count - 1];
            return sheet;
        }

        static ExcelPackage CreateReport(dynamic Table)
        {
            var excel = new ExcelPackage();
            ExcelRange range;
            ExcelWorksheet sheet;
            sheet = Export( excel, Table, out range);

            CreatePivotTable(range, TableStyles.Medium12);
            return excel;
        }

        static ExcelPivotTable CreatePivotTable(ExcelRange range, TableStyles tableStyle)
        {
            int count = range.Worksheet.Workbook.Worksheets.Count;
            var summary = range.Worksheet.Workbook.Worksheets.Add("PivotTable" + count);
            var pivotTable = summary.PivotTables.Add(summary.Cells["A3"], range, "Summary" + count);

            pivotTable.ApplyBorderFormats = true;
            pivotTable.ApplyNumberFormats = true;

            pivotTable.TableStyle = tableStyle;

            pivotTable.WorkSheet.View.ShowGridLines = false;
            pivotTable.MultipleFieldFilters = false;
            pivotTable.RowGrandTotals = false;
            pivotTable.ColumGrandTotals = false;
            pivotTable.Compact = false;
            pivotTable.CompactData = false;
            pivotTable.GridDropZones = false;
            pivotTable.Outline = false;
            pivotTable.OutlineData = false;
            pivotTable.ShowError = true;
            pivotTable.ErrorCaption = "[error]";
            pivotTable.ShowHeaders = false;
            pivotTable.UseAutoFormatting = true;
            pivotTable.ApplyWidthHeightFormats = true;
            pivotTable.ShowDrill = true;
            //pivotTable.DataOnRows = false;
            pivotTable.WorkSheet.View.FreezePanes(pivotTable.PageFields.Count + pivotTable.ColumnFields.Count + 3, 1);


            foreach (var fld in pivotTable.Fields)
            {
                pivotTable.RowFields.Add(fld);
                fld.Compact = false;
                fld.Outline = false;
                fld.ShowAll = false;
                fld.SubtotalTop = false;
                fld.SubTotalFunctions = eSubTotalFunctions.None;
            }


            return pivotTable;
        }

    }
}

텔레릭 그리드의 데이터가 어떻게 액세스되는지 모르기 때문에 일부 기능에서 동적 키워드를 사용했지만 행 및 열 속성이 있을 수 있습니다.그렇지 않은 경우 코드의 해당 부분을 변경해야 합니다.그리드의 데이터 원본으로 DataTable을 사용하는 경우 DataTable을 직접 전달할 수 있습니다.파일이 생성되면 MS Excel 또는 openxml 형식을 지원하는 다른 응용 프로그램으로 파일을 열 수 있습니다.원하는 결과를 얻으려면 ExcelPivotTable 객체를 사용해야 합니다.아래 샘플 보고서의 스크린샷도 참조하십시오.

언급URL : https://stackoverflow.com/questions/35464555/how-to-interpret-a-collection-when-exporting-to-excel-xlsx-using-telerik

반응형