텔레릭을 사용하여 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
.
이를 더 잘 이해하기 위해 다음과 같은 결과가 나왔습니다.
문제
저의 문제는 이것을 엑셀 파일(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>
...
각각 하나씩 Excel 페이지가 생성될 것으로 예상했습니다.MarketInfo
누락된 속성들로.
저는 Excel 사용법과 Excel 용어에 익숙하지 않습니다. 시트 페이지에서 컬렉션을 얼마나 일반적으로 나타낼 수 있는지 잘 모르겠습니다. 새 시트 페이지를 만들고 해당 셀에 "연결"하면 될 것 같습니다.
제가 지원서에 표시한 것과 동일한 정보를 엑셀 파일에 표시하고 싶습니다.
질문.
텔레릭이 관련 라이브러리를 수출하는데 어떻게 그럴 수 있습니까?
텔레릭 라이브러리를 사용할 수 없는 경우 다른 타사 무료 라이브러리로 어떻게 할 수 있습니까?
(이것으로 저는 다른 종류의 제안을 받아들일 수 있다는 것을 말하고 있습니다. 하지만 좀 더 집중적인 Excel 라이브러리에 대해 알고 있다는 것을 명심하십시오. 어쨌든 저는 여전히 어떤 lib로도 이 작업을 수행하는 방법을 이해하지 못할 것입니다... 아마도 Excel UI를 사용하여 컬렉션을 추가/표현하는 동일한 작업을 수행할 수 있는 방법에 대한 잘못된 이해 때문입니다.
새 RadGridView를 계층 구조로 메모리에 채우고 다른 사용자처럼 내보냅니다. http://www.telerik.com/forums/radgrid-hierarchy-export-to-excel-showing-exporting-master-table-rows-but-detail-rows-are-blank-lines
XML, ClosedX를 사용하여 생성되는 Excel XML을 제어할 수 있습니다.ML은 OpenXML에 비해 작업하기가 매우 쉽습니다.
지원 요청을 텔레릭으로 여는 것이 그리드 보기 내보내기 옵션의 세부 정보별 시트 페이지에 대한 옵션이 있는지 확인하는 가장 빠른 방법일 수 있습니다.
오픈 소스 라이브러리를 사용하려면 다음을 시도하십시오. 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
'programing' 카테고리의 다른 글
ASP.NET MVC Ajax 오류 처리 (0) | 2023.08.30 |
---|---|
각도 단위 테스트 입력 값 (0) | 2023.08.30 |
jquery $(this).id가 정의되지 않음을 반환합니다. (0) | 2023.08.30 |
모든 요소에서 클래스를 제거하는 방법 jquery (0) | 2023.08.30 |
PowerShell 가져오기 모듈 대 도트 소싱 (0) | 2023.08.30 |