엑셀 파일에 .NET 다운로드 데이터

목록 <모델> 목록 = HttpPost <일람 <모델 >> ( ""paramModel);
경우 (목록! = NULL && list.Count> 0)
{

DataTable을 tblDatas = 새로운 DataTable을 ( "Datas");
DataColumn에 직류 = NULL;
DC = tblDatas.Columns.Add ( "ID"Type.GetType ( "선택 System.Int32"));
dc.AutoIncrement = TRUE; //自动增加
dc.AutoIncrementSeed = 1; //起始为1
dc.AutoIncrementStep = 1; //步长为1
dc.AllowDBNull = 거짓; //

DC = tblDatas.Columns.Add ( "推广 位 ID"의 typeof (문자열));

foreach는 (목록에서 VAR 항목)
{

DataRow를 newRow;
newRow tblDatas.NewRow = ();
newRow [ "推广位ID"] = item.PositionId;

 tblDatas.Rows.Add (newRow);

}

VAR 결과 = NPOIHelper.ExportDataTableToExcel (tblDatas);

파일 (결과, "응용 프로그램 / MS-엑셀", "统计 .XLS")을 반환;

}

 

스트림 ExportDataTableToExcel 공용 정적 (DataTable의 sourceTable)
{
HSSFWorkbook 통합 문서 새 새 HSSFWorkbook = ();
MemoryStream을 MemoryStream을 새로운 새로운 MS = ();
ISheet 시트 workbook.CreateSheet = (); // 생성 워크 시트
IRow headerRow = sheet.CreateRow (0);
/ / 열 이름
목록 <문자열> arrHeader = 새로운 목록 <문자열> (); // 달성 세퍼레이터에 열 이름 (열 이름 문자열 복수) 위젯 (ID | 번호, 이름 | 이름)
foreach 문을합니다 (DataColumn에 상품 에 sourceTable.Columns)
{
arrHeader.Add (item.ColumnName)
}
문자열 [] = arrParam 새로운 새로운 캐릭터 [arrHeader.Count]; // 배열 저장하는 단일 컬럼 이름 문자열
문자열 [] = arrName 새로운 캐릭터 [ arrParam.Length ]; // 데이터베이스 열 이름
문자열 [] = arrType 새로운 캐릭터 [ arrParam.Length]; // 엑셀 세포 종류는
대해 INT (I = 0; I는 <arrHeader.Count; I는 ++)
{
arrParam arrHeader = [I] .Split ( '|'); //// 1 구분 (ID, ID)로서 중국어 이름과 열 이름을 취득 문자열 단일 배열 수득
headerRow.CreateCell (I)을 .SetCellValue (arrParam [0]); // 열 이름 설정
arrName가 [I] = arrParam [0 //]로 .toString () 배열 데이터베이스 열 이름을 첨가

// 필드 형식을 통과 여부
IF (arrParam.Length> 2)
{
arrType [I] = arrParam [2]로 .toString (); // Type 필드
}
}
// 데이터
INT rowIndex에 = 1;

// 셀 포맷
ICellStyle workbook.CreateCellStyle CellStyle = ();
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat ( "0.00");

IF (= NULL && sourceTable.Rows.Count sourceTable> 0!)
{
(에만 DataRow 행 sourceTable.Rows에서) // foreach는 환상 데이터 선
{
IRow의 DataRow = sheet.CreateRow (rowIndex에)
합니다 (DataColumn에 sourceTable.Columns에서 열) foreach는 // 루프 열은 각 열, 각 행의 제거
{
(I에게 = 0을 int로, I가 <arrName.Length; I는 ++)에 대한 //주기 필드는 출력 구성의 DataRow에 표시되는
{
column.ColumnName.ToLower (IF () == arrName [I] .ToLower ())
{
// 경우, 필드 형 질량
IF (arrParam.Length> 2)
{
ICell 세포 dataRow.CreateCell = (I),
스위치 (arrType [I] .Replace ( " \ R & LT \ N- "," ") .trim ())
{
케이스"INT "
! IF (String.IsNullOrEmpty (행 [칼럼]로 .toString ()))
{
cell.SetCellValue (Convert.ToInt64 (열 [열]로 .toString ()));
}
다른
{
cell.SetCellValue (열 [열]로 .toString ());
}
휴식;
케이스 "문자열"
cell.SetCellValue (열 [열]로 .toString ());
단절;
경우 "날짜"
cell.SetCellValue (열 [열]로 .toString ());
단절;
경우에 "소수"
(! string.IsNullOrEmpty (열 [열]로 .toString ())) 경우에
{
cell.SetCellValue (Convert.ToInt64 (Convert.ToDecimal (열 [열]로 .toString ())));
}
다른
{
cell.SetCellValue (열 [열]로 .toString ());
}

= CellStyle cell.CellStyle;
BREAK;
}
}
다른
{
dataRow.CreateCell (I) .SetCellValue (행 [칼럼]로 .toString ()); // 데이터 문자열에 추가 엑셀 행에 표시 할
}
BREAK;
}
}
}
rowIndex에 ++ ;
}
}
workbook.Write (MS)
ms.Flush ();
ms.Position = 0;
시트 = NULL;
headerRow = NULL;
통합 = NULL;
MS를 반환;
}

 

추천

출처www.cnblogs.com/xiaoyao123/p/11579764.html