关于 文件流:
每次向文件流中写入数据时,并不是立刻将数据 保存到 文件流对应的硬盘文件,而是当 文件流对象被关闭时或着显示的调用了流对象的Flush方法时,才一次性的将 流对象缓存中 所保存的 数据 写入到对应的硬盘文件。
#region 04.1读取Excel文件
/// <summary>
/// 读取Excel文件
/// </summary>
private void btnRead_Click(object sender, EventArgs e)
{
string strPath = txtFilePath.Text;//获得 要读取 的 excel文件 路径
using (Stream file = File.OpenRead(strPath))//将 指定 的 文件 以流的方式读取到 file对象中
{
//将 文件流 对象 传入 workbook,此时,workbook 就相当于一个 Excel文件操作对象了
HSSFWorkbook workbook = new HSSFWorkbook(file);
//获得 Excel中 第一个工作表的 名字
//MessageBox.Show(workbook.GetSheetName(0));
//获得 Excel 中 第一个 表
HSSFSheet sheet = workbook.GetSheetAt(0);
//获得最后一行的下标
int rowNum = sheet.LastRowNum;
MessageBox.Show(rowNum.ToString());
//保存整个表的数据
StringBuilder sbExcelData = new StringBuilder();
for (int j = 0; j <= rowNum; j++)//循环所有行
{
//每行中所有的列的值
string strFirstRow = string.Empty;
//获得 当前循环的 行
HSSFRow dr = sheet.GetRow(j);
//LastCellNum:Gets the index of the last cell contained in this row (PLUS ONE)
//最后一行号:获得当前行最后一个单元格的下标 (+1),其实就是获得总列数
for (int i = 0; i < dr.LastCellNum; i++)//循环当前行所有列
{
if (dr.GetCell(i).CellType == HSSFCell.CELL_TYPE_STRING)//如果单元格内容是 字符串
{
strFirstRow += dr.GetCell(i).StringCellValue + ",";
}
else if (dr.GetCell(i).CellType == HSSFCell.CELL_TYPE_NUMERIC)//如果单元格内容是 数值
{
strFirstRow += dr.GetCell(i).NumericCellValue + ",";
}
//MessageBox.Show(sheet.GetRow(0).GetCell(1).StringCellValue); //.LastCellNum
}
sbExcelData.Append(strFirstRow + "\r\n");
}
MessageBox.Show(sbExcelData.ToString());
}
}
#endregion
#region 04.2 将数据保存到Excel文件
private void btnExportExcel_Click(object sender, EventArgs e)
{
//在内存中 创建 一个 空的 Excel文件对象
HSSFWorkbook wb = new HSSFWorkbook();
//在 Excel文件对象中 添加一个 表格对象
HSSFSheet sheet = wb.CreateSheet();
//从数据库获得 所有的 班级数据
List<MODEL.Classes> list = bllClass.GetAllClasses();
for (int i = 0; i < list.Count; i++)
{
MODEL.Classes model=list[i];
//为了将 当前循环的班级 实体对象 的数据 写入 excle表格 ,咱们立即创建一个 行
HSSFRow dr = sheet.CreateRow(i);
dr.CreateCell(0, HSSFCell.CELL_TYPE_NUMERIC).SetCellValue(model.CID);
dr.CreateCell(1, HSSFCell.CELL_TYPE_STRING).SetCellValue(model.CName);
dr.CreateCell(2, HSSFCell.CELL_TYPE_NUMERIC).SetCellValue(model.CCount);
//保存日期格式数据时 ,将其tostring一下
dr.CreateCell(3, HSSFCell.CELL_TYPE_STRING).SetCellValue(model.CAddTime.ToString());
}
//根据路径 创建一个文件流对象
using (Stream st = new FileStream(txtFilePath.Text, FileMode.OpenOrCreate))
{
//st.Flush()
//将 内存中 的 Excel文件对象 的内容 通过文件流对象 保存到硬盘中
wb.Write(st);
msgDiv.MsgDivShow("保存成功:" + txtFilePath.Text);
}
}
#endregion
}
}