在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
众所周知,Excel 可能是世界上最常用的电子表格应用程序。 用户既包括开发人员,也包括普通大众,但开发人员可能更容易接受这篇文章。 最初,开发人员在各种应用程序中使用 Excel 的选择并不多。 但是,有 VBA(Visual Basic 应用程序)您可以根据自己的需要使用 Office 套件中内置的任何 Office 产品。
开发人员使用 Excel 中的 VBA 来定制他们与 Excel 及其数据的交互,甚至是其可视化功能。 但是,这最终还是不够的。 开发人员希望获得更多,因此他们开始使用 Office.Interop.Reporting。
在本文中,我将比较两个非常好的 Excel 库,它们不依赖于 Office.Interop 来与 Excel 协同工作。 它们是
NPOI
您将看到并了解每个 Excel 库的功能,然后通过代码示例和分步教程对两者进行比较。 虽然本文无法涵盖这两个 Excel 库的所有功能,但它将解释每个库最常见和最流行的用途。
GetSheetAt
方法获取行
方法获取单元格
方法NPOI 是 POI Java 项目的 .NET 版本。 http://poi.apache.org/. POI 是一个开源项目,可帮助您读/写 xls、doc 和 ppt 文件。 它的应用范围很广。
例如,您可以用它来
NPOI 是 C# 移植的 POI Java 项目由 Apache 提供。 它是免费和开源的。 此外,翻译不需要 Interop,也就是说,用户不需要安装 Excel 就可以使用开发人员的应用程序。
IronXL.Excel 是 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 读取 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 一样功能强大,但却更加直观。 当然,有了 License 密钥,您就可以享受付费软件最重要的优势:您可以获得我们的专业支持、持续可靠的更新计划,以及向 Iron Software 支持代理申请功能的能力,他们很乐意为您提供帮助。 这是开源无法提供的。
本项目可在 GitHub 上查阅: IronXL vs NPOI 示例