1.常用的类与方法
工作本HSSFWorkbook
构造方法,无参表示创建一个新的工作本,可以接收一个流用于打开一个现有的工作本
方法CreateSheet(索引):创建指定索引的sheet对象
方法GetSheetAt(索引):根据索引获取sheet对象
方法CreateCellStyle():创建单元格样式对象
方法CreateFont():创建字体对象
方法Write(stream):将工作本输出到流中
工作表HSSFSheet
方法CreateRow(索引):创建指定索引的行
方法GetRow(索引):根据索引获取行
方法AddMergedRegion():设置合并区域,参数包括开始行索引、开始列索引、结束行索引、结束列索引
方法SetColumnWidth(索引,宽度):设置指定列的宽度,单位是一个字符宽度的256分之1
说明:一个汉字占用两个字符
属性FirstRowNum、LastRowNum:获取第一行、最后一行的索引值
行HSSFRow
方法CreateCell(索引):创建指定索引的行
方法GetCell(索引):根据索引获取单元格
属性HeightInPoints:指定或设置高度
单元格HSSFCell
方法SetCellValue():设置单元格中的值
属性***CellValue:获取单元格中指定类型的值,如果类型不匹配则抛异常
属性CellStyle:获取或设置单元格样式
单元格样式HSSFCellStyle
方法SetFont(字体对象):设置字体样式
属性Alignment:水平对齐,1左,2中,3右
字体对象HSSFFont
属性FontHeightInPoints:获取或设置字体大小
属性Boldweight:获取或设置字体加粗
2.导出和导入excel实例
namespace WindowsFormsApplication1
{
public partial class NPOITest : Form
{
public NPOITest()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ManagerInfoBLL mibBll=new ManagerInfoBLL();
var list=mibBll.GetList();
dataGridView1.DataSource = list;
//1.创建workbook,不指定参数,表示创建一个新的工作本
HSSFWorkbook workbook=new HSSFWorkbook();
//2.创建sheet
HSSFSheet sheet = workbook.CreateSheet("管理员");
//3.创建row
HSSFRow row = sheet.CreateRow(0);
//4.创建cell
HSSFCell cell0 = row.CreateCell(0);
cell0.SetCellValue("管理员列表");
//5.设置合并单元格
sheet.AddMergedRegion(new NPOI.HSSF.Util.Region(0, 0, 0, 3));
//6.设置单元格居中
HSSFCellStyle styleTitle = workbook.CreateCellStyle();
styleTitle.Alignment = 2;//居中
cell0.CellStyle = styleTitle;
//6.1设置字体
HSSFFont fontTitle = workbook.CreateFont();
fontTitle.FontHeightInPoints = 14;
styleTitle.SetFont(fontTitle);
//7.创建标题行
//7.1创建行
HSSFRow rowTitle = sheet.CreateRow(1);
//7.2创建单元格
HSSFCell ceelTitle0 = rowTitle.CreateCell(0);
ceelTitle0.SetCellValue("编号");
ceelTitle0.CellStyle = styleTitle;
HSSFCell cellTitle1 = rowTitle.CreateCell(1);
cellTitle1.SetCellValue("姓名");
cellTitle1.CellStyle = styleTitle;
HSSFCell cellTitle2 = rowTitle.CreateCell(2);
cellTitle2.SetCellValue("密码");
cellTitle2.CellStyle = styleTitle;
HSSFCell cellTitle3 = rowTitle.CreateCell(3);
cellTitle3.SetCellValue("类型");
cellTitle3.CellStyle = styleTitle;
//8.循环遍历集合,创建正文数据
//8.1遍历集合
int rowIndex = 2;
foreach (var mi in list)
{
//8.2创建行
HSSFRow rowData = sheet.CreateRow(rowIndex++);
//8.3创建数据单元格
HSSFCell cellData0 = rowData.CreateCell(0);
cellData0.SetCellValue(mi.MId);
HSSFCell cellData1 = rowData.CreateCell(1);
cellData1.SetCellValue(mi.MName);
HSSFCell cellData2 = rowData.CreateCell(2);
cellData2.SetCellValue(mi.MPwd);
HSSFCell cellData3 = rowData.CreateCell(3);
cellData3.SetCellValue(mi.MType==0?"员工":"经理");
}
//保存工作本
FileStream stream=new FileStream(@"C:UsersLWP1398Desktop 1.xlx",FileMode.Create);
workbook.Write(stream);
stream.Close();
stream.Dispose();
}
private void button2_Click(object sender, EventArgs e)
{
//1.读取excel数据,存入list中
List<ManagerInfo> list=new List<ManagerInfo>();
//1.1读取文件
using (FileStream stream=new FileStream(@"C:UsersLWP1398Desktop 1.xlx", FileMode.Open))
{
//1.2创建workbook
HSSFWorkbook workbook=new HSSFWorkbook(stream);
//1.3读取sheet
HSSFSheet sheet = workbook.GetSheetAt(0);
//1.4读取正文数据,因为0,1行为标题,直接跳过
int rowIndex = 2;
HSSFRow row = sheet.GetRow(rowIndex++);
while (row!=null)
{
//读到数据时返回行对象,如果没有读到则返回null
//1.5读取一行中的对象
ManagerInfo mi=new ManagerInfo();
mi.MId=Convert.ToInt32(row.GetCell(0).NumericCellValue) ;
mi.MName = row.GetCell(1).StringCellValue;
mi.MPwd = row.GetCell(2).StringCellValue;
mi.MType = row.GetCell(3).StringCellValue == "经理" ? 1: 0;
list.Add(mi);
row = sheet.GetRow(rowIndex++);
}
}
//2.将list赋值给datagridview
dataGridView1.DataSource = list;
}
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 3)
{
e.Value = Convert.ToInt32(e.Value) == 0 ? "员工" : "经理";
}
}
}
}