GridView를 Excel 시트로 내보내는 간단한 방법을 구현하려고 시도했습니다. 그러나, 지금은 꽤 오랫동안이 하나 붙어 :ASP.NET : 동적으로 추가 된 행을 포함하여 GridView를 Excel로 내보내는 올바른 방법
내 GridView
가 true
에 AutoGenerateColumns
세트가, 데이터 소스는 동적 (시간이 지남에 열 번호를 변경) 정말 예측할 수있다. GetHeader()
및 GetSubHeader()
모두 반환
if (e.Row.RowType == DataControlRowType.Header) {
gv.Controls[0].Controls.AddAt(0, GetHeader());
gv.Controls[0].Controls.AddAt(1, GetSubHeader());
}
가 GridViewRow
(두 가지가 있습니다 : 자동으로 생성하는 HeaderRow
그러므로 나는이 같은 OnRowCreated
경우에 내 자신을 false
에 ShowHeader
를 설정하고 만든, 나를 위해 적합하지 않다 헤더의 행은 서로 다른 colspans, rowspans 및 stuff를 사용합니다. - 내가 건너 뛰어야 냈어요 내가 무엇을 얻을 것이 숨겨져 원래 HeaderRow와 테이블
ExcelPackage excel = new ExcelPackage();
var workSheet = excel.Workbook.Worksheets.Add("List 1");
var totalCols = gv.Rows[0].Cells.Count;
var totalRows = gv.Rows.Count;
var headerRow = gv.HeaderRow;
for (int i = 0; i < totalCols; i++) {
workSheet.Cells[1,i+1].Value = headerRow.Cells[i].Text;
}
for (int i = 0; i < totalCols; i++) {
for (int j = 0; j < totalRows; j++) {
workSheet.Cells[j+2,i+1].Value = gv.Rows[j].Cells[i].Text;
}
}
return excel;
:이 같은 GridView
사용의 OpenXML을 내보낼 때이 모든 그러나, 웹 사이트에 잘 작동 첫 번째 사이클은 분명히 - 다음 실제 데이터가있는 행. OnRowCreated
에 추가 한 두 행의 흔적이 없습니다.
아무에게도 이것이 왜 일어나고 있는지 그리고 어떻게 해결할 수 있는지 설명해주십시오. 이 메소드는 웹 사이트에 표시된대로 전체 GridView를 내보내는 것이 이상적입니다.
참고 : HtmlTextWriter와 GridView.RenderControl()
을 사용하는 다른 방법은 다운로드 후에도 Excel에서 파일을 열지 못했기 때문에 옵션이 아닐 수 있습니다 (OpenOffice는 괜찮 았음). 그런 다음 시트가 읽히지 않은 곳을 읽습니다. 이 경우 중요한 데이터 처리에 실제로 사용할 수 있습니다.
편집 : OnRowDataBound
대신 OnRowCreated
에 두 HeaderRow
의 추가 후, 그들을 위해 루프 계정 그러나 워크 시트에 들어간 모든 빈 필드이며, 또한, 그들은 gv.Rows.Count
에 의해 고려되지 않습니다 보인다 루프는 내 테이블의 마지막 두 행에 도달하지 않습니다.
디버그를 시도했는데 실제로 Text
속성이 설정되어 있고 표가 웹 사이트에서 OK로 표시 되더라도 gv.Rows[j].Cells[i].Text;
에 의해 반환되는 모든 것은 ""
입니다.
이 동작은 매우 혼란 스럽습니다. 아무도 왜 이런 일이 일어 났는지 말할 수 없었을까요?
감사하지만 위에서 언급 한 것처럼 Excel에서 다운로드 한 파일을 열지 못하기 때문에이 기능이 작동하지 않습니다. OpenOffice는 문제없이 그것을 열어 주므로, o_o에 당황 스럽습니다. – Epsiloney
코드에서 ExcelPackage 클래스를 사용하고 있습니다. 코드가 작동하면 Excel 클래스를 사용해보십시오. 그리고 제가 말했듯이, 제 대답은 갈 길 중의 하나 일뿐입니다. 다른 많은 예가 있습니다. 그냥 수색을 해. –