/// <summary>
/// 导出Excel
/// </summary>
/// <param name="sourceDs"></param>
/// <param name="fileName">导出的文件名</param>
/// <param name="sheetName">导出的表名,多个表请以逗号(,)分割</param>
public
static
void
ResponseDataSetToExcel(DataSet sourceDs,
string
fileName,
string
sheetName =
null
)
{
fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8).ToString();
HSSFWorkbook workbook =
new
HSSFWorkbook();
MemoryStream ms =
new
MemoryStream();
string
[] sheetNames = (sheetName ??
string
.Empty).Split(
','
);
int
length = sourceDs.Tables.Count;
for
(
int
i = 0; i < length; i++)
{
var
_sheetName = sheetNames.Length > i ? sheetNames[i] :
string
.Format(
"Sheet{0}"
, i);
var
sheet = workbook.CreateSheet(_sheetName);
sheet.CreateFreezePane(0, 1, 0, 1);
var
headStyle = workbook.CreateCellStyle();
IFont font = workbook.CreateFont();
font.Boldweight = (
short
)FontBoldWeight.Bold;
font.FontHeightInPoints = (
short
)11;
font.Color = HSSFColor.Black.Index;
headStyle.FillBackgroundColor = HSSFColor.Black.Index;
headStyle.SetFont(font);
var
cellStyleDet = workbook.CreateCellStyle();
IFont font1 = workbook.CreateFont();
font.FontHeightInPoints = (
short
)10;
cellStyleDet.SetFont(font1);
var
headerRow = sheet.CreateRow(0);
foreach
(DataColumn column
in
sourceDs.Tables[i].Columns)
{
var
headCell = headerRow.CreateCell(column.Ordinal);
headCell.SetCellValue(column.ColumnName);
headCell.CellStyle = headStyle;
}
int
rowIndex = 1;
foreach
(DataRow row
in
sourceDs.Tables[i].Rows)
{
var
dataRow = sheet.CreateRow(rowIndex);
foreach
(DataColumn column
in
sourceDs.Tables[i].Columns)
{
var
detCell = dataRow.CreateCell(column.Ordinal);
var
cellValue = row[column].ToString();
var
type = column.DataType.ToString().ToLower();
if
(row[column] != DBNull.Value)
{
if
(type.Contains(
"decimal"
) || type.Contains(
"double"
) || type.Contains(
"int"
))
{
detCell.SetCellValue(Convert.ToDouble(row[column]));
}
else
if
(type.Contains(
"datetime"
))
{
detCell.SetCellValue(((DateTime)row[column]).ToString(
"yyyy-MM-dd HH:mm:ss"
));
}
else
{
detCell.SetCellValue(row[column].ToString());
}
}
detCell.CellStyle = cellStyleDet;
}
rowIndex++;
}
}
workbook.Write(ms);
HttpContext.Current.Response.AppendHeader(
"Content-Disposition"
,
"attachment;filename="
+ fileName);
HttpContext.Current.Response.BinaryWrite(ms.GetBuffer());
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
ms.Flush();
ms.Position = 0;
ms.Close();
workbook =
null
;
ms =
null
;
}