C# Excel操作之读,写,追加
程序员文章站
2022-06-28 18:58:31
C# Excel追加数据上一篇介绍了写Excel:写Excel本篇介绍在Excel中追加数据:追加数据除了写操作的功能外,还要注意流程和追加的位置。...
C# Excel追加数据
上一篇介绍了写Excel:写Excel
本篇介绍在Excel中追加数据:
追加数据除了写操作的功能外,还要注意流程和追加的位置。
此处使用xls作为模板追加数据,代码如下:
/// <summary>
/// 在已有的Excel中追加数据
/// </summary>
/// <param name="template_file_path"> 模板文件完整路径</param>
/// <param name="output_file_path"> 导出文件完整路径</param>
/// <param name="dt"> 数据</param>
/// <param name="sheet_name"> Sheet名称</param>
/// <param name="start_row"> 起始行</param>
/// <returns>true 成功 false 失败</returns>
public bool Add_DataTable_To_Excel(string template_file_path, string output_file_path, DataTable dt, string sheet_name, int start_row)
{
string[] temp = template_file_path.Split('.');
string[] temp1 = output_file_path.Split('.');
if (temp[temp.Count() - 1] != temp1[temp1.Count() - 1])
{
Trace("file format error,inconsistent format");
return false;
}
if (start_row < 1)
{
Trace("start row must bigger than 0");
return false;
}
bool bxls = false;
ISheet sheet = null;
HSSFWorkbook hssfworkbook = null;
XSSFWorkbook xssfworkbook = null;
HSSFCellStyle cell_Style = null;
try
{
if (File.Exists(output_file_path))
File.Delete(output_file_path);
File.Copy(template_file_path, output_file_path);
}
catch (Exception ex)
{
Trace(ex.Message);
return false;
}
FileStream file = new FileStream(output_file_path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
if (temp[temp.Count() - 1].Equals("xlsx")) // 2007版本
{
xssfworkbook = new XSSFWorkbook();
sheet = xssfworkbook.GetSheet(sheet_name);
}
else if (temp[temp.Count() - 1].Equals("xls")) // 2003版本
{
bxls = true;
hssfworkbook = new HSSFWorkbook(file);
sheet = hssfworkbook.GetSheet(sheet_name);
//设置单元格格式
cell_Style = (HSSFCellStyle)hssfworkbook.CreateCellStyle(); //定义一个单元格样式
// 设置单元格背景色
cell_Style.FillForegroundColor = HSSFColor.COLOR_NORMAL; //HSSFColor.Red.Index;
cell_Style.FillPattern = FillPattern.SolidForeground;
//设置文字对齐方式
cell_Style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; //水平居中
cell_Style.VerticalAlignment = VerticalAlignment.Center; //垂直居中
//设置字体格式开始
HSSFFont hssf_font = (HSSFFont)hssfworkbook.CreateFont();
//设置字体的颜色为自定义颜色
HSSFPalette palette = hssfworkbook.GetCustomPalette();
palette.SetColorAtIndex(HSSFColor.Lime.Index, (byte)0, (byte)0, (byte)0); //RGB颜色值
hssf_font.Color = HSSFColor.Lime.Index;
//字体属性
hssf_font.FontName = "微软雅黑";
hssf_font.FontHeightInPoints = 10; //设置字体大小
hssf_font.IsBold = true;
cell_Style.SetFont(hssf_font); //设置cellStyle 样式的字体
IDataFormat dataFormat = hssfworkbook.CreateDataFormat(); //设置单元格格式
cell_Style.DataFormat = dataFormat.GetFormat("@");
//边框
cell_Style.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; //None 无边框 Thin 细线 Thick 粗线
cell_Style.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; //Hair Dotted Dashed Medium 点状线
cell_Style.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; //SlantedDashDot MediumDashDotDot DashDotDot MediumDashDot DashDot MediumDashed虚线
cell_Style.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; //Double双细线
}
else
{
Trace("file format error,not excel file");
return false;
}
file.Close();
try
{
float output = 0.0f;
IRow row = null;
ICell cell = null;
for (int i = 0; i < dt.Rows.Count; i++) //数据
{
row = sheet.CreateRow(i + 1 + start_row - 2);
for (int j = 0; j < dt.Columns.Count; j++)
{
cell = row.CreateCell(j);
if (float.TryParse(dt.Rows[i][j].ToString(), out output))
{
cell.SetCellValue(Convert.ToDouble(output.ToString("0.00")));//输出数字
}
else
cell.SetCellValue(dt.Rows[i][j].ToString());
if (bxls)
cell.CellStyle = cell_Style;
}
}
MemoryStream stream = new MemoryStream(); //转为字节数组
if (temp[temp.Count() - 1].Equals("xlsx"))
xssfworkbook.Write(stream);
else
hssfworkbook.Write(stream);
var buf = stream.ToArray();
using (FileStream fs = new FileStream(output_file_path, FileMode.Create, FileAccess.Write)) //保存为Excel文件
{
fs.Write(buf, 0, buf.Length);
fs.Flush();
}
}
catch (Exception ex)
{
Trace(ex.Message);
return false;
}
return true;
}
private void button_追加_Click(object sender, EventArgs e)
{
DataTable dt = Excel_To_DataTable("D:\\test.xlsx");
Add_DataTable_To_Excel("D://test2.xls", "D://test3.xls", dt, "test", 10);
}
通过上图可以看到追加数据的效果!
在此强调一下此句:cell.SetCellValue(Convert.ToDouble(output.ToString(“0.00”)));//输出数字
如果不使用此句,导出的数字会出现批注,like this:
至此在Excel中追加数据的功能完成!
本人C#开发经验不足,有任何问题和可升级的部分请帮忙指出!
下载地址:完整代码
本文地址:https://blog.csdn.net/shuaiLS/article/details/107369443
上一篇: 2021字节跳动秋招提前批——游戏客户端123+HR面经(已OC)
下一篇: JVM(6)堆
推荐阅读
-
Python3 读、写Excel文件的操作方法
-
HDFS之读操作步骤、写操作流程
-
asp.net(C#)之NPOI"操作Excel
-
基于.net EF6 MVC5+WEB Api 的Web系统框架总结(4)-Excel文件读、写操作
-
使用POI同时对Excel文件进行读和写操作时避免Invalid header signatu
-
简单使用easyExcel实现对excel读和写操作
-
Java 文件操作一(写文件、按行读文件、删除文件、复制文件、追加数据、创建临时文件、修改最后修改日期、获取文件大小)
-
C# XML操作 代码大全(读XML,写XML,更新,删除节点,与dataset结合等)第1/2页
-
C# Excel操作之读,写,追加
-
java 用二种方式, 追加写入文件, 同时指定文件的编码格式, 读/写线程并发操作同一文件