office导出excel本地可以成功,服务器怎么也导出不成功,就换用NPOI导出excel 可以成功导出gridview或datatble数据
来源:互联网 发布:下载MySQL 编辑:程序博客网 时间:2024/05/17 12:23
1.office导出excel本地可以成功,服务器怎么也导出不成功,就换用NPOI导出excel 可以成功 可以成功导出gridview或datatble数据
一个小小的功能让我整了好长时间 这里整理下来 帮助更多寻找的人吧
第一步,引用NPOI.dll
第二步,加类
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.Text;
using System.IO;
using NPOI.HPSF;
using NPOI.HSSF.Util;
using NPOI.XSSF.UserModel;
using NPOI.SS.Util;
/// <summary>
/// ExcleHelper 的摘要说明
/// </summary>
///
namespace excelS
{
public class ExcleHelper
{
public ExcleHelper()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public static Stream RenderDataTableToExcel(DataTable SourceTable)
{
HSSFWorkbook workbook = new HSSFWorkbook();
MemoryStream ms = new MemoryStream();
HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet();
HSSFRow headerRow = (HSSFRow)sheet.CreateRow(0);
//调整excel 显示的高宽
headerRow.Height = 85 * 4;
sheet.DefaultColumnWidth = 17;
foreach (DataColumn column in SourceTable.Columns)
headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
int rowIndex = 1;
foreach (DataRow row in SourceTable.Rows)
{
HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);
dataRow.Height = 85 * 4;
foreach (DataColumn column in SourceTable.Columns)
{
dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
HSSFCell newCell = (HSSFCell)dataRow.CreateCell(column.Ordinal);
string drValue = row[column].ToString();
switch (column.DataType.ToString())
{
case "System.String"://字符串类型
newCell.SetCellValue(drValue);
break;
case "System.DateTime"://日期类型
DateTime dateV;
DateTime.TryParse(drValue, out dateV);
//为了这个时间格式 调了一下午
NPOI.HSSF.UserModel.HSSFCellStyle style = (HSSFCellStyle)workbook.CreateCellStyle();
NPOI.HSSF.UserModel.HSSFDataFormat format = (HSSFDataFormat)workbook.CreateDataFormat();
style.DataFormat = format.GetFormat("yyyy-mm-dd");
newCell.CellStyle = style;
newCell.SetCellValue(dateV);
//格式化显示
break;
case "System.Boolean"://布尔型
bool boolV = false;
bool.TryParse(drValue, out boolV);
newCell.SetCellValue(boolV);
break;
case "System.Int16"://整型
case "System.Int32":
case "System.Int64":
case "System.Byte":
int intV = 0;
int.TryParse(drValue, out intV);
newCell.SetCellValue(intV);
break;
case "System.Decimal"://浮点型
case "System.Double":
double doubV = 0;
double.TryParse(drValue, out doubV);
newCell.SetCellValue(doubV);
break;
case "System.DBNull"://空值处理
newCell.SetCellValue("");
break;
default:
newCell.SetCellValue("");
break;
}
}
rowIndex++;
}
workbook.Write(ms);
ms.Flush();
ms.Position = 0;
sheet = null;
headerRow = null;
workbook = null;
return ms;
}
public static void RenderDataTableToExcel(DataTable SourceTable, string FileName)
{
MemoryStream ms = RenderDataTableToExcel(SourceTable) as MemoryStream;
FileStream fs = new FileStream(FileName, FileMode.Create, FileAccess.Write);
byte[] data = ms.ToArray();
fs.Write(data, 0, data.Length);
fs.Flush();
fs.Close();
data = null;
ms = null;
fs = null;
}
public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, string SheetName, int HeaderRowIndex)
{
HSSFWorkbook workbook = new HSSFWorkbook(ExcelFileStream);
HSSFSheet sheet = (HSSFSheet)workbook.GetSheet(SheetName);
DataTable table = new DataTable();
HSSFRow headerRow = (HSSFRow)sheet.GetRow(HeaderRowIndex);
int cellCount = headerRow.LastCellNum;
for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
table.Columns.Add(column);
}
int rowCount = sheet.LastRowNum;
for (int i = (sheet.FirstRowNum + 1); i < sheet.LastRowNum; i++)
{
HSSFRow row = (HSSFRow)sheet.GetRow(i);
DataRow dataRow = table.NewRow();
for (int j = row.FirstCellNum; j < cellCount; j++)
dataRow[j] = row.GetCell(j).ToString();
}
ExcelFileStream.Close();
workbook = null;
sheet = null;
return table;
}
public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, int SheetIndex, int HeaderRowIndex)
{
HSSFWorkbook workbook = new HSSFWorkbook(ExcelFileStream);
HSSFSheet sheet = (HSSFSheet)workbook.GetSheetAt(SheetIndex);
DataTable table = new DataTable();
HSSFRow headerRow = (HSSFRow)sheet.GetRow(HeaderRowIndex);
int cellCount = headerRow.LastCellNum;
for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
table.Columns.Add(column);
}
int rowCount = sheet.LastRowNum;
for (int i = (sheet.FirstRowNum + 1); i < sheet.LastRowNum; i++)
{
HSSFRow row = (HSSFRow)sheet.GetRow(i);
DataRow dataRow = table.NewRow();
for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
dataRow[j] = row.GetCell(j).ToString();
}
table.Rows.Add(dataRow);
}
ExcelFileStream.Close();
workbook = null;
sheet = null;
return table;
}
/// <summary>读取excel
/// 默认第一行为标头
/// </summary>
/// <param name="path">excel文档路径</param>
/// <returns></returns>
public static DataTable RenderDataTableFromExcel(string path)
{
DataTable dt = new DataTable();
HSSFWorkbook hssfworkbook;
using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))
{
hssfworkbook = new HSSFWorkbook(file);
}
HSSFSheet sheet = (HSSFSheet)hssfworkbook.GetSheetAt(0);
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
HSSFRow headerRow = (HSSFRow)sheet.GetRow(0);
int cellCount = headerRow.LastCellNum;
for (int j = 0; j < cellCount; j++)
{
HSSFCell cell = (HSSFCell)headerRow.GetCell(j);
dt.Columns.Add(cell.ToString());
}
for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
{
HSSFRow row = (HSSFRow)sheet.GetRow(i);
DataRow dataRow = dt.NewRow();
for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
dataRow[j] = row.GetCell(j).ToString();
}
dt.Rows.Add(dataRow);
}
return dt;
}
}
}
第三步 调用
MemoryStream ms = new MemoryStream();
DataTable dt =BindDataListexcel();
string strtitle = "RAILWAY" + System.DateTime.Now.ToString("yyyyMMddhhmmss");
if (dt.Rows.Count <= 0)
{
MsgBox("NO Information!");
return;
}
ms = (MemoryStream)ExcleHelper.RenderDataTableToExcel(dt); //DataTable 转 Excle正常格式。
//导出Excel。
Response.AddHeader("Content-Disposition", string.Format("attachment;filename=" + System.Web.HttpUtility.UrlEncode(strtitle, System.Text.Encoding.UTF8) + ".xls"));
Response.BinaryWrite(ms.ToArray());
很方便吧 我自己找了好多代码 找个三个方式,这一个是导出最好的,其他的导出文档打开有错误提示,
1.第一个方法,用NPIO 导出打开的文档出现2个文档;
2.第二个方法,导出的excel文档,打开时,总出现 此格式不正确,是否打开,打开后 数据也对。
这里的方法,以上代码可避免这2个问题。
- office导出excel本地可以成功,服务器怎么也导出不成功,就换用NPOI导出excel 可以成功导出gridview或datatble数据
- NPOI导出数据到Excel
- npoi实现数据导出Excel
- NPOI导出Excel和基于office导出Excel表比较
- Java大批量导出数据,格式可以为xml或excel.
- 导出到excel,成功测试
- Asp.net成功导出Excel
- NPOI导出Excel
- 利用npoi导出excel
- NPOI导出Excel
- NPOI Excel导入导出
- 使用NPOI导出EXCEL
- NPOI导出excel
- 利用npoi导出excel
- NPOI导出Excel功能
- npoi导出到EXCEL
- NPOI导出Excel
- NPOI实现EXCEL导出
- android自定义控件(三) 增加内容 自定义属性 format详解
- iOS下的XML解析
- 10个精选的颜色选择器Javascript脚本及其jQuery插件
- LightOJ 1016 Brush (II)
- 无限的机智啊 字母首位大写 不用数组= =6666666
- office导出excel本地可以成功,服务器怎么也导出不成功,就换用NPOI导出excel 可以成功导出gridview或datatble数据
- LeetCode Serialize and Deserialize Binary Tree 树
- JAVA之日期格式
- 准备数据:归一化数值
- Group By
- 线程优先级只使用三个等级
- android工程混淆时要注意的
- python中怎样转到指定目录
- 卷积公式