2014-02-26 6 views
1

SpreadsheetGear를 사용하여 DataTable의 데이터를 Excel 파일로 내보내려고합니다. Excel 파일의 워크 시트는 열 머리글과 특정 서식이있는 템플릿에서 복사됩니다. 유지 보수를 쉽게하기 위해 (저장된 프로 시저와 템플릿을 변경하여 서비스를 재배치하기보다는 보고서 내용을 변경) 코드에서 특정 열 서식, 즉 열 채우기 색을 수행하고 싶지 않습니다.SpreadsheetGear CopyFromDataTable 셀 서식

저는 스프레드 시트 기어의 CopyFromDataTable을 사용하여 내보내기를 수행합니다. 그러나 InsertCells 플래그는 데이터가 설명 메모로 삽입 된 행의 형식 (열 채우기 색)을 취하지 않게합니다 ("이것은 미리 형식화 될 수 있습니다").

이 문제를 해결하려면 InsertCells 플래그를 사용하지 말고 대신 템플릿의 전체 열에 채우기 색을 설정하십시오. 그러나 이로 인해 사용 된 범위를 넘어 전체 열이 색상으로 표시됩니다. 서식을 사용 된 범위로 제한하려고합니다.

의 서식을 지우는 방법이 있습니까? UsedRange?? 내가 이것을 쓰고있을 때 나는이 접근법이 복잡하다는 것을 깨닫고있다. 그러나 서식 지정은 필수이며 저장 프로 시저 변경 및 템플리트 변경 만 필요하도록 유지 관리를 단순화하려고합니다. 나는 다른 접근 방식을 쉽게 사용할 수 있도록 개방적입니다.

+0

- 테이블의 열과 행 수가 불확실합니까?그렇지 않으면 항상 고정 된 수의 열과 행이있는 경우 시트 템플릿에서 대상 영역의 서식을 미리 설정할 수 있습니다. – Xcheque

+0

@Xcheque - 열 수는 알려져 있고 템플릿에 미리 서식이 지정되어 있습니다. 이는 문제가되는 행 (불확정 양) 일뿐입니다. 템플릿의 전체 열에 채우기 색을 설정하면 사용 된 행의 양을 지나서 열의 서식을 지정하고 싶지 않습니다. SpreadsheetGear 삽입물이 삽입 된 행이 위에 삽입 된 형식을 취하는 Excel의 수동 삽입물처럼 작동하도록 할 수 없습니다. –

답변

2

SetDataFlags.InserCells 열거 형 옵션을 사용하면 DataTable에 의해서만 채워진 범위에서 서식을 선택할 수 있습니다. 그러나 documentation :

"이 플래그를 지정하는 경우 [insertCells] 플래그를 지정하는 경우 정확히 2 행의 데이터를 제공해야하며 그 뒤에 행에 대한 행이 있어야합니다 SpreadsheetGear.Data.SetDataFlags.NoColumnHeaders가 지정되지 않은 경우 머리글. "

필요한 경우 (내부/채우기 색상 등) "데이터 용 두 행"을 포맷해야합니다. SpreadsheetGear (시작 메뉴/화면의 SpreadsheetGear 폴더에 있음)와 함께 제공되는 Explorer 샘플 솔루션에는 보고> 통합 문서 아래의 샘플이 포함되어 있습니다.

UPDATE 아래

는 NoColumnHeaders과 조합 InsertCells 플래그를 사용하는 방법을 보여줍니다 예입니다. 이 코드는 worksheet이 이미 형식화 된 범위로 설정되어 있고 크기가 형식화 된 범위의 열 수에 해당하는 DataTable을 얻을 수 있다고 가정합니다.

using SpreadsheetGear; 
using SpreadsheetGear.Data; 

// Generate DataTable. For this example, let's say it is 5 columns wide and 
// 10 rows deep... 
DataTable dataTable = // ...get DataTable... 

// We're not interested in a "Column Header" row, so for the above dataTable, 
// an IRange 5 columns wide and 2 rows deep needs to be specified where those 
// two rows are already setup with the desired formatting. In this case B2:F3 
// are formatted accordingly. 
worksheet.Cells["B2:F3"].CopyFromDataTable(dataTable, SetDataFlags.InsertCells | 
    SetDataFlags.NoColumnHeaders); 

// Sheet should how have B2:F11 populated with your dataTable data, with all 
// rows having picked up the formatting as originally specified in B2:F3 
+0

예, 읽었습니다. 내가 알 수있는 한 두 번째 데이터 플래그를 지정할 수 없기 때문에 설명서가 약간 혼란 스러웠습니다. 따라서 InsertCell을 설정하는 경우 NoColumnHeaders를 설정할 수 없으며 그 반대의 경우도 가능합니다 (잘못된 경우 수정하십시오). 그걸 제외하고는, 이것이 내가 취한 접근 방식이었고 원하는대로 작동하지 않았습니다. 그것은 값을 붙여 넣는 것처럼 행동했습니다. 데이터는 이미 셀에있는 형식에 관계없이 배치되었습니다. –

+0

다중 플래그를 사용할 수 있습니다. 비트 OR 연산자 (|) 만 사용하면됩니다. 이 기능의 전반적인 문제점에 대해서는 InsertCells의 문제점을 인식하지 못했으며 SpreadsheetGear에서 일하므로 알아 두어야합니다! 도움이 될 경우를 대비하여이 기능을 보여주는 예를 사용하여 답변을 수정하겠습니다. –

+0

흥미롭게도, 조만간 비트 연산자를 배울 필요가 있다는 것을 알았습니다! 나는 이것을 시험해보고 무슨 일이 일어나는지를 보게 될 것이다. –

1

나는 매우 우아하지 않음이 개 제안

1)을 가지고 있지만 당신은 스프레드 시트를 채울 것으로 예상 최대 행수의 엑셀 템플릿에 조건부 서식을 사용할 수 있습니다. 셀이 비어 있지 않거나 동일한 행의 다른 참조 셀이 정의 된 기준을 충족시키는 경우 원하는 형식을 활성화 할 수 있어야합니다.

2) Datatable.Rows.Count를 사용하여 C# 데이터 테이블의 행 수를 계산 한 다음 해당 정보에서 Excel 셀 범위 정의를 만듭니다. 표에 붙여 넣은 후 원하는 셀 범위에 원하는 서식을 적용합니다 (코드 예제가 없어도 죄송합니다).

+0

제안 해 주셔서 감사합니다. 1) - 행 수는 예측할 수 없습니다. 하지만 어쩌면 나는 조건 (그것의 .XLS 너무 너무 끔찍하지 않음), 다음의 데이터를 복사 한 후, (복사 조건부 서식을 제거하는 자체에 대한 전체 시트를 붙여 서식 "붙여 넣기 값"상당이 모든 단일 행의 서식을 수 있을까?) 그런 다음 모든 빈 줄을 삭제하십시오. 2) - 원래 구현으로이 작업을 수행하고 있지만 재배포를 방지하기 위해 코드에서 서식을 지정하는 것을 원하지 않습니다. 어쩌면 나는이 모든 것을 피할 수 있고 사용자가 사용 된 범위를 넘는 열 서식을 사용할 수 있도록 할 수 있습니다 ... –