不管用哪一种语言开发应用程序,导出功能是最常见的,一般导出文件格式最常见的有PDF 、Excel、CSV、Word、TXT等,今天我们在此介绍一下Excel的导出方法。
微软提供了导出Excel的多种办法,但是今天我们在这里只介绍一种第三方的导出方法,因为它简单,更多符合我们的编程习惯(个人观点),下面开始:
一、下载,官网地址:https://npoi.codeplex.com/,下载后根据需要引用dll;
不说废话,直接上代码
二、写入Excel
//创建xls文件
private static void createExcel()
{
//创建工作薄
HSSFWorkbook wk = new HSSFWorkbook();
//创建一个名称为mySheet的表
ISheet tb = wk.CreateSheet("mySheet");
//创建第一行
IRow rowHeader = tb.CreateRow(0);
//设置行的高度 行高设置数值好像是像素点的1/20,所以*20以便达到设置效果;
rowHeader.Height = 20*20;
ICell cell_one = rowHeader.CreateCell(0);
cell_one.SetCellValue("这是标题行");
cell_one.CellStyle = Getcellstyle(wk, stylexls.header);
//设置公式
//cell_one.CellFormula = "HYPERLINK(\"测试图片.jpg\",\"测试图片.jpg\")";
//设置单元的宽度 宽度数值好像是字符的1/256,所以*256以便达到设置效果。
tb.SetColumnWidth(0, 20*256);
//合并单元格 该方法的参数次序是:开始行号,结束行号,开始列号,结束列号。
// tb.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 3));
//创建第二行
IRow row = tb.CreateRow(1);
for (int i = 0; i < 20; i++)
{
ICell cell = row.CreateCell(i); //在第二行中创建单元格
cell.SetCellValue(i);//循环往第二行的单元格中添加数据
}
//打开一个xls文件,如果没有则自行创建,如果存在myxls.xls文件则在创建是不要打开该文件!
string phsicalPath = AppDomain.CurrentDomain.BaseDirectory;
//string b = Environment.CurrentDirectory;
using (FileStream fs = File.OpenWrite(string .Format(@"{0}/1.xls", phsicalPath)))
{
wk.Write(fs); //向打开的这个xls文件中写入mySheet表并保存。
Console.WriteLine("提示:创建成功!");
}
}
三、写入Excel
//读取xls文件
private static void readExcel()
{
StringBuilder sbr = new StringBuilder();
//生成文件的物理路径
string phsicalPath =string.Format(@"{0}1.xls", AppDomain.CurrentDomain.BaseDirectory) ;
using (FileStream fs = new FileStream(phsicalPath, FileMode.OpenOrCreate)) //打开1.xls文件
{
HSSFWorkbook wk = new HSSFWorkbook(fs); //把xls文件中的数据写入wk中
//NumberOfSheets是Excel中总共的表数量
for (int i = 0; i < wk.NumberOfSheets; i++)
{
//读取表数据
ISheet sheet = wk.GetSheetAt(i);
//LastRowNum 是当前表的总行数
for (int j = 0; j <= sheet.LastRowNum; j++)
{
//读取当前行数据
IRow row = sheet.GetRow(j);
if (row != null)
{
sbr.Append("-------------------------------------\r\n"); //行与行之间的界限
//LastCellNum 是当前行的总列数
for (int k = 0; k <= row.LastCellNum; k++)
{
//当前表格
ICell cell = row.GetCell(k);
if (cell != null)
{
//获取单元格的数据值 并 转换为字符串类型
sbr.Append(cell.ToString());
}
}
}
}
}
}
string phsicalPath_txt = string.Format(@"{0}myText.txt", AppDomain.CurrentDomain.BaseDirectory);
//把读取xls文件的数据写入myText.txt文件中
using (StreamWriter wr = new StreamWriter(new FileStream(phsicalPath_txt, FileMode.Append)))
{
wr.Write(sbr.ToString());
wr.Flush();
}
Console.WriteLine("读取成功");
}
#region 定义单元格常用到样式的枚举
public enum stylexls
{
header,
url,
time,
number,
money,
百分比,
中文大写,
科学计数法,
默认
}
#endregion
#region 定义单元格常用到样式
static ICellStyle Getcellstyle(IWorkbook wb, stylexls str)
{
//定义几种字体
IFont font = wb.CreateFont();
font.FontHeightInPoints = 10;
font.FontName = "微软雅黑";
ICellStyle cellStyle = wb.CreateCellStyle();
//边框
cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Dotted;
cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Hair;
cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Hair;
cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Dotted;
//边框颜色
//cellStyle.BottomBorderColor = HSSFColor.OLIVE_GREEN.BLUE.index;
// cellStyle.TopBorderColor = HSSFColor.OLIVE_GREEN.BLUE.index;
//背景图形,我没有用到过。
// cellStyle.FillForegroundColor = HSSFColor.OLIVE_GREEN.BLUE.index;
//水平对齐
cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left;
//垂直对齐
cellStyle.VerticalAlignment = VerticalAlignment.Center;
//自动换行
cellStyle.WrapText = true;
//缩进;当设置为1时,前面留的空白太大了。希旺官网改进。或者是我设置的不对
cellStyle.Indention = 0;
//上面基本都是设共公的设置
//下面列出了常用的字段类型
switch (str)
{
case stylexls.header:
//设置字体加粗样式
font.Boldweight = short.MaxValue;
font.Color = HSSFColor.Red.Index;
font.IsItalic = true;//下划线
break;
case stylexls.time:
IDataFormat datastyle = wb.CreateDataFormat();
cellStyle.DataFormat = datastyle.GetFormat("yyyy/mm/dd");
break;
case stylexls.number:
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");
break;
case stylexls.money:
IDataFormat format = wb.CreateDataFormat();
cellStyle.DataFormat = format.GetFormat("¥#,##0");
break;
case stylexls.url:
font.Underline = FontUnderlineType.Single;
break;
case stylexls.百分比:
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00%");
break;
case stylexls.中文大写:
IDataFormat format1 = wb.CreateDataFormat();
cellStyle.DataFormat = format1.GetFormat("[DbNum2][$-804]0");
break;
case stylexls.科学计数法:
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00E+00");
break;
case stylexls.默认:
break;
}
cellStyle.SetFont(font);
return cellStyle;
}
#endregion