在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
众所周知,Excel 可能是世界上使用最多的电子表格应用程序。用户既包括开发人员,也包括普通用户,但这篇文章可能会让开发人员更感兴趣。最初,开发人员在各种应用程序中使用 Excel 的选项并不多。不过,有 VBA (Visual Basic 应用程序) 您可以根据自己的需要操作任何 Office 产品。
开发人员使用 Excel 中的 VBA 来定制与 Excel 及其数据的交互,甚至是其可视化功能。但是,这最终还是不够。开发人员希望获得更多,于是他们开始使用 Office.Interop.NET 技术。
在本文中,我将比较两个非常好的 Excel 库,它们不依赖于 Office.Interop 来使用 Excel。它们是
您将看到并了解每个 Excel 库的功能,然后通过代码示例和分步教程对两者进行比较。虽然本文无法涵盖这两个 Excel 库的所有功能,但它将解释每个库最常见和最流行的用途。
GetSheetAt
方法获取行
方法获取单元格
方法NPOI 是 POI Java 项目的 .NET 版本。 http://poi.apache.org/.POI 是一个开源项目,可以帮助你读/写 xls、doc、ppt 文件。它的应用范围非常广泛。
例如,您可以用它来
NPOI 是 C# 移植的 POI Java 项目。它是免费开源的。此外,它不需要 Interop,这意味着用户不需要安装 Excel 就能让开发者的应用程序与之配合使用。
IronXL 是一款适用于 VB 和 C# 的 Excel API。有了 IronXL,你就可以在 .NET 中读取、编辑和创建 Excel 电子表格文件。
NPOI | IronXL |
---|---|
单元格范围 | 单元格范围 |
单元格样式(边框、颜色、填充、字体、编号、对齐方式) | 单元格可视化样式 字体、大小、背景图案、边框、对齐方式和数字格式。 |
公式计算 | 公式 |
数据验证 | 数据验证 |
条件格式化 | 条件格式化 |
图片 | 图片 |
图表 | 图表 |
您可以通过手动下载、NuGet 或 Visual Studio 中的 NuGet 包管理器来安装这两个库。下面是简要介绍。
要通过 NuGet 安装 NPOI,请打开 Visual Studio developer 命令提示符并输入以下内容:
使用以下步骤通过 Visual Studio 中的 NuGet 包管理器安装 IronXL 或 NPOI:
要下载 IronXL,请访问以下网址 网址 并点击 "下载 "按钮。
要通过 NuGet 安装 IronXL,请打开 Visual Studio 开发人员命令提示符并输入以下内容:
使用以下步骤通过 Visual Studio 中的 NuGet 包管理器安装 IronXL:
以下代码演示了如何使用 NPOI 读取 Excel 文件并显示其内容。 添加以下代码并包含必要的命名空间:
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
Imports NPOI.SS.UserModel
Imports NPOI.XSSF.UserModel
以下代码读取现有 Excel 文件,并将其显示在数据网格视图中。
public void ReadExcelNPOI()
{
DataTable dtTable = new DataTable();
List<string> lstRows = new List<string>();
ISheet objWorksheet;
string strPath = @"c:\temp\NPOI_Test.XLSX";
using (var fStream = new FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
fStream.Position = 0;
XSSFWorkbook objWorkbook = new XSSFWorkbook(fStream);
objWorksheet = objWorkbook.GetSheetAt(0);
IRow objHeader = objWorksheet.GetRow(0);
int countCells = objHeader.LastCellNum;
for (int j = 0; j < countCells; j++)
{
ICell objCell = objHeader.GetCell(j);
if (objCell == null
string.IsNullOrWhiteSpace(objCell.ToString())) continue;
{
dtTable.Columns.Add(objCell.ToString());
}
}
for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++)
{
IRow objRow = objWorksheet.GetRow(i);
if (objRow == null) continue;
if (objRow.Cells.All(d => d.CellType == CellType.Blank)) continue;
for (int j = objRow.FirstCellNum; j < countCells; j++)
{
if (objRow.GetCell(j) != null)
{
if (!string.IsNullOrEmpty(objRow.GetCell(j).ToString()) && !string.IsNullOrWhiteSpace(objRow.GetCell(j).ToString()))
{
lstRows.Add(objRow.GetCell(j).ToString());
}
}
}
if (lstRows.Count > 0)
dtTable.Rows.Add(lstRows.ToArray());
lstRows.Clear();
}
}
dataGridView1.DataSource = dtTable;
}
private void button1_Click(object sender, EventArgs e)
{
ReadExcelNPOI();
}
public void ReadExcelNPOI()
{
DataTable dtTable = new DataTable();
List<string> lstRows = new List<string>();
ISheet objWorksheet;
string strPath = @"c:\temp\NPOI_Test.XLSX";
using (var fStream = new FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
fStream.Position = 0;
XSSFWorkbook objWorkbook = new XSSFWorkbook(fStream);
objWorksheet = objWorkbook.GetSheetAt(0);
IRow objHeader = objWorksheet.GetRow(0);
int countCells = objHeader.LastCellNum;
for (int j = 0; j < countCells; j++)
{
ICell objCell = objHeader.GetCell(j);
if (objCell == null
string.IsNullOrWhiteSpace(objCell.ToString())) continue;
{
dtTable.Columns.Add(objCell.ToString());
}
}
for (int i = (objWorksheet.FirstRowNum + 1); i <= objWorksheet.LastRowNum; i++)
{
IRow objRow = objWorksheet.GetRow(i);
if (objRow == null) continue;
if (objRow.Cells.All(d => d.CellType == CellType.Blank)) continue;
for (int j = objRow.FirstCellNum; j < countCells; j++)
{
if (objRow.GetCell(j) != null)
{
if (!string.IsNullOrEmpty(objRow.GetCell(j).ToString()) && !string.IsNullOrWhiteSpace(objRow.GetCell(j).ToString()))
{
lstRows.Add(objRow.GetCell(j).ToString());
}
}
}
if (lstRows.Count > 0)
dtTable.Rows.Add(lstRows.ToArray());
lstRows.Clear();
}
}
dataGridView1.DataSource = dtTable;
}
private void button1_Click(object sender, EventArgs e)
{
ReadExcelNPOI();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
以下代码演示了如何使用 IronXL 读取 Excel 文件并将其显示在数据网格视图中。添加以下代码并包含命名空间:
using IronXL;
using IronXL;
Imports IronXL
请注意其中包含了 IronXL。这是 IronXL 运行的必要条件。添加下面几行:
private void button2_Click(object sender, EventArgs e)
{
string strPath = @"c:\temp\NPOI_Test.XLSX";
WorkBook workbook = WorkBook.Load(strPath);
WorkSheet sheet = workbook.DefaultWorkSheet;
var dtTable = sheet.ToDataTable(true);
dataGridView1.DataSource = dtTable;
}
private void button2_Click(object sender, EventArgs e)
{
string strPath = @"c:\temp\NPOI_Test.XLSX";
WorkBook workbook = WorkBook.Load(strPath);
WorkSheet sheet = workbook.DefaultWorkSheet;
var dtTable = sheet.ToDataTable(true);
dataGridView1.DataSource = dtTable;
}
Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim strPath As String = "c:\temp\NPOI_Test.XLSX"
Dim workbook As WorkBook = WorkBook.Load(strPath)
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
Dim dtTable = sheet.ToDataTable(True)
dataGridView1.DataSource = dtTable
End Sub
正如您所看到的,这一切都会大大减少工作量。
为什么选择 IronXL?正如您所看到的,IronXL 有一个易于使用的 API,可以保持代码的整洁。使用 IronXL 的库都拥有简洁、可读性强的代码,这样的投资可以减少理解代码所需的时间和精力,从而在不破坏代码的情况下更改代码。
IronXL 与 NPOI 一样功能强大,但却更加直观。当然,有了许可证密钥,您就可以获得付费软件最重要的优势:您可以获得我们的专业支持、持续可靠的更新计划,还可以向 Iron 软件支持代理申请功能,他们很乐意为您提供帮助。这是开源软件无法提供的。
本项目可在 GitHub 上下载: