C#을 사용하면 Excel 2003에 목록 (즉, List<List<T>>
)을 직접 내보낼 수 있습니까?C# 목록을 Excel로 내보내기
큰 텍스트 파일을 구문 분석하고 Excel로 내보내는 중입니다. 한 번에 하나의 셀을 작성하면 너무 많은 오버 헤드가 발생합니다. List<T>
을 사용하여 행이나 열의 수를 지정하는 것에 대해 걱정할 필요가 없었습니다.
현재 파일 끝까지 기다린 다음 내 List<List<object>>
의 내용을 2 차원 배열에 넣습니다. 그런 다음 배열을 Excel.Range 객체의 값으로 설정할 수 있습니다. 그것은 작동하지만 행이나 열의 수를 신경 쓰지 않고 List of Lists를 취할 수 있어야하며 A1에서 어디로 든 워크 시트에 덤프하면됩니다. 여기
object oOpt = System.Reflection.Missing.Value; //for optional arguments
Excel.Application oXL = new Excel.Application();
Excel.Workbooks oWBs = oXL.Workbooks;
Excel._Workbook oWB = oWBs.Add(Excel.XlWBATemplate.xlWBATWorksheet);
Excel._Worksheet oSheet = (Excel._Worksheet)oWB.ActiveSheet;
int numberOfRows = outputRows.Count;
int numberOfColumns = int.MinValue;
//outputRows is a List<List<object>>
foreach (List<object> outputColumns in outputRows)
{
if (numberOfColumns < outputColumns.Count)
{ numberOfColumns = outputColumns.Count; }
}
Excel.Range oRng = oSheet.get_Range("A1", oSheet.Cells[numberOfRows,numberOfColumns]);
object[,] outputArray = new object[numberOfRows,numberOfColumns];
for (int row = 0; row < numberOfRows; row++)
{
for (int col = 0; col < outputRows[row].Count; col++)
{
outputArray[row, col] = outputRows[row][col];
}
}
oRng.set_Value(oOpt, outputArray);
oXL.Visible = true;
oXL.UserControl = true;
이 작동하지만, 차라리 배열을 생성하는 중간 단계를 필요없이 Excel로 직접 목록을 사용하십시오 Excel 용입니다. 어떤 아이디어?
감사합니다! 우리가 .NET 3.0에 있지는 않지만, 나는 당신의 모든 설명에 감사드립니다. – reverendlarry
문제 없습니다. 도움이 되니 기쁩니다. :-) 항목 # 1만이 .NET 3.0과 관련이 있으며 다른 모든 항목은 모든 .NET Framework에 적용됩니다. LINQ가 3.0으로 이동하는 주요 이유입니다. 모든 코드에 혁명을 일으키지는 않지만 특정 영역에서는 LINQ가 매우 훌륭한 기능입니다. –
고마워요! 이것은 완벽하게 작동, 명확 upvote! 그러나 도움이 될 수있는 하나의 작은 세부; 나는이 코드에'oXL.Quit; '문장을 추가해야했다. 그렇지 않다면 프로세스가 계속 실행되고 특정 시점에 나는 에러를 받기 시작했다. – Soph