通过 c# 中的流进行操作,开发者可以动态地创建、加载、修改和保存 excel 文件,从而实现灵活高效的数据处理。这种方法可以在很大程度上减少直接的磁盘 i/o 操作,不仅提升了应用程序性能,还增强了响应能力。尤其适用于实时数据操作或存储受限的场景,可以简化数据交换和系统集成。本文通过 spire.xls for .net 演示如何使用 c# 通过流创建、加载、修改和保存 excel 文件,为数据管理提供灵活且可扩展的ag凯发旗舰厅的解决方案。
安装 spire.xls for .net
首先,您需要将 spire.xls for .net 包含的 dll 文件作为引用添加到您的 .net 项目中。dll 文件可以从此链接下载,也可以通过 安装。
pm> install-package spire.xls
用 c# 动态创建 excel 文件并保存到流
利用 spire.xls for .net,开发者可以通过初始化 workbook 对象动态创建 excel 文件,然后填充数据并设置格式,最后使用 workbook.savetostream() 方法将其保存到流。这种方法可以省去直接对磁盘进行文件存储的需求,同时提升了应用的性能和响应速度。
以下是通过 c# 创建 excel 文件并保存到流的步骤:
- 创建 workbook 类的实例以生成一个新的 excel 工作簿,新建的工作簿默认包含三个工作表。
- 使用 workbook.worksheets[] 属性访问特定的工作表。
- 定义要写入工作表的数据,例如使用 datatable 组织数据。
- 通过 worksheet.insertdatatable() 方法直接将数据表插入工作表中,或者使用 worksheet.range[].value 属性单独设置单元格的值。
- 对工作表单元格进行格式化,例如设置颜色、字体、边框,或调整列宽。
- 使用 workbook.savetostream() 方法将工作簿保存到内存流中。保存后的流可用于进一步处理,例如保存为文件或通过网络进行传输。
- c#
using spire.xls;
using system.data;
using system.drawing;
namespace createexcelstream
{
class program
{
static void main(string[] args)
{
// 创建一个新的工作簿实例
workbook workbook = new workbook();
// 获取工作簿中的第一个工作表
worksheet sheet = workbook.worksheets[0];
// 创建并填充一个包含示例数据的 datatable
datatable datatable = new datatable("data");
datatable.columns.add("编号", typeof(int));
datatable.columns.add("姓名", typeof(string));
datatable.columns.add("年龄", typeof(int));
datatable.columns.add("国家", typeof(string));
datatable.columns.add("工资 (¥)", typeof(decimal));
datatable.rows.add(1, "张伟", 29, "中国", 8000m);
datatable.rows.add(2, "李娜", 35, "中国", 12000m);
datatable.rows.add(3, "王强", 42, "中国", 15000m);
datatable.rows.add(4, "杰克", 26, "美国", 9500m);
datatable.rows.add(5, "陈思", 31, "中国", 11000m);
datatable.rows.add(6, "石原安子", 28, "日本", 8800m);
// 将 datatable 中的数据插入到工作表中
sheet.insertdatatable(datatable, true, 1, 1);
// 格式化工作表
// 设置表头行的样式
sheet.rows[0].style.color = color.lightskyblue;
sheet.rows[0].style.font.fontname = "微软雅黑";
sheet.rows[0].style.font.size = 12f;
sheet.rows[0].borderaround(); // 给表头行添加外边框
sheet.rows[0].borders.color = color.lightsteelblue; // 设置边框颜色
// 设置数据行的样式
for (int i = 1; i < sheet.allocatedrange.rows.count(); i )
{
sheet.rows[i].style.color = color.lightgray;
sheet.rows[i].style.font.fontname = "微软雅黑";
sheet.rows[i].style.font.size = 11f;
}
sheet.range[2, 1, sheet.rows.count(), sheet.columns.count()].borderinside(); // 添加数据行单元格内边框
sheet.range[2, 1, sheet.rows.count(), sheet.columns.count()].borders.color = color.lightsteelblue; // 设置边框颜色
// 调整列宽以适应内容
for (int j = 1; j <= sheet.allocatedrange.columns.count(); j )
{
sheet.autofitcolumn(j);
}
// 将工作簿保存到内存流
memorystream stream = new memorystream();
workbook.savetostream(stream, fileformat.version2016);
// 将流内容写入到文件
file.writeallbytes("output/通过流创建excel文件.xlsx", stream.toarray());
// 释放资源
workbook.dispose();
}
}
}
用 c# 从流加载并读取 excel 文件
通过 spire.xls for .net,开发者可以利用 workbook.loadfromstream() 方法直接从流加载 excel 文件。加载完成后,可以轻松读取到流中 excel 文件的单元格数据,实现快速灵活的数据处理,而无需文件 i/o 操作。
以下是通过 c# 从流加载并读取 excel 文件的步骤:
- 创建一个 workbook 实例。
- 创建一个 memorystream 或 filestream 对象。
- 使用 workbook.loadfromstream() 方法将 excel 文件从流中加载到工作簿中。
- 使用 workbook.worksheets[] 属性获取第一个工作表。
- 遍历工作表的行和列,通过 worksheet.allocatedrange[].value 属性提取单元格数据。
- 打印提取的数据,或将数据用于其他操作。
- c#
using spire.xls;
namespace loadexcelstream
{
class program
{
static void main(string[] args)
{
// 创建一个 workbook 类的实例
workbook workbook = new workbook();
// 创建一个内存流
memorystream stream = new memorystream();
file.openread("sample.xlsx").copyto(stream);
// 从内存流加载 excel 文件
workbook.loadfromstream(stream);
// 获取工作簿中的第一个工作表
worksheet sheet = workbook.worksheets[0];
// 初始化一个列表,用于存储从工作表中提取的数据
list> data = new list>();
for (int i = 0; i < sheet.allocatedrange.rows.count(); i )
{
// 创建一个列表来存储每行数据
list lines = new list();
for (int j = 0; j < sheet.allocatedrange.columns.count(); j )
{
// 获取单元格的值并添加到当前行的列表中
lines.add(sheet.allocatedrange[i 1, j 1].value);
}
// 将当前行的数据添加到数据列表中
data.add(lines);
}
// 打印提取的数据,或将其用于后续操作
foreach (list lines in data)
{
console.writeline(string.join(" | ", lines));
}
}
}
}
用 c# 在流中修改并保存 excel 文件
借助 spire.xls for .net,开发者可以在内存中修改 excel 文件。首先通过 loadfromstream() 方法将流中的 excel 文件加载到 workbook 对象中。完成修改(例如更改单元格值或格式)后,可以使用 workbook.savetostream() 方法将文件保存回流。无需依赖直接的文件存储操作即可实现实时的 excel 文件数据更改。
以下是通过 c# 修改流中 excel 文件的步骤:
- 创建代表 excel 文件的 workbook 实例。
- 创建 memorystream 或 filestream 实例。
- 使用 workbook.loadfromstream() 方法从流加载 excel 文件。
- 通过 workbook.worksheets[] 属性访问工作表。
- 修改表头行及数据行的样式(字体、大小、背景色等),通过 cellrange.style 属性完成。
- 使用 worksheet.autofitcolumn() 方法自动调整列宽以适应内容。
- 使用 workbook.savetostream() 方法将更改保存到流。
- c#
using spire.xls;
using system.drawing;
namespace modifyexcelstream
{
class program
{
static void main(string[] args)
{
// 创建 workbook 类的一个新实例
workbook workbook = new workbook();
// 创建一个内存流
memorystream stream = new memorystream();
file.openread("sample.xlsx").copyto(stream);
// 从内存流加载 excel 文件
workbook.loadfromstream(stream);
// 获取工作簿中的第一个工作表
worksheet sheet = workbook.worksheets[0];
// 修改表头行的样式
cellrange headerrow = sheet.allocatedrange.rows[0];
headerrow.style.font.fontname = "宋体";
headerrow.style.font.size = 12f;
headerrow.style.color = color.lightblue;
// 修改数据行的样式
for (int i = 1; i < sheet.allocatedrange.rows.count(); i )
{
cellrange datarow = sheet.allocatedrange.rows[i];
datarow.style.font.fontname = "宋体";
datarow.style.font.size = 10f;
datarow.style.color = color.lightgray;
// 交替着色(偶数行)
if (i % 2 == 0)
{
datarow.style.color = color.lightslategray;
}
}
// 自动调整列宽以适应内容
for (int k = 1; k <= sheet.allocatedrange.columns.count(); k )
{
sheet.autofitcolumn(k);
}
// 修改边框颜色
sheet.allocatedrange.style.borders.color = color.white;
// 将修改后的工作簿保存回内存流
workbook.savetostream(stream);
// 将流内容写入到一个新文件
file.writeallbytes("output/通过流修改excel文件.xlsx", stream.toarray());
// 释放资源
workbook.dispose();
}
}
}
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。