Spire.XLS for Python 14.9.3 已发布。本次更新新增支持 在将 Excel 转换为 PDF 时决定是否保留原始的页面尺寸,同时增强了 Excel 到 PDF 和图表工作表到 PDF 的转换功能。此外,一些已知问题也在该版本中成功修复,如在 ubuntu22 上设置字体样式时抛出异常的问题。详情请阅读以下内容。
新功能:
book = Workbook()
book.LoadFromFile(inputFile)
# Retain the page size set
book.ConverterSetting.SheetFitToPageRetainPaperSize = True
book.SaveToFile(outputFile, FileFormat.PDF)问题修复:
Spire.XLS 14.11.3 现已发布。该版本支持传递值对透视表进行分组, 还支持新公式 ACOT、ACOTH、COT、TOROW、TOCOL。此外,一些在加载、保存、转换和打印 Excel 文档时出现的问题也已成功解决。新功能及问题修复详情如下。
新功能:
Workbook wb = new Workbook();
wb.LoadFromFile(inputFile);
Worksheet pivotSheet = wb.Worksheets[0];
XlsPivotTable pivot = (XlsPivotTable)pivotSheet.PivotTables[0]; PivotField dateBaseField = pivot.PivotFields["number"] as PivotField;
dateBaseField.CreateGroup(3000, 3800, 1);
pivot.CalculateData();
wb.SaveToFile(outputFile);
wb.Dispose();问题修复:
Spire.Presentation for Java 9.11.3 现已正式发布。最新版本优化了转换 PowerPoint 为图像时的清晰度。此外,一些已知问题也在本次更新中被成功修复,例如使用 ISmartArtNode.getTextFrame().getTextLocation() 程序抛 "ClassCastException" 错误的问题。详情请查看以下内容。
问题修复:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-JAVA.html
增强 PDF 文档的交互性对于优化文档管理和改善用户体验至关重要。通过在 .NET 框架中使用 C# 创建 PDF 动作,开发者可以为 PDF 文档添加各种动态元素,比如文件链接、导航按钮、网页链接以及音频等。这些元素不仅能够实现诸如跳转至特定页面、打开目标网站、访问相关文件或播放音乐等功能,还能显著提高文档的实用性与用户满意度。本文将介绍如何使用 Spire.PDF for .NET 库,通过 C# 在 PDF 文档中创建动作。
首先,您需要添加 Spire.PDF for .NET 包中包含的 DLL 文件作为 .NET 项目中的引用。DLL 文件可以从此链接下载或通过 NuGet 安装。
PM> Install-Package Spire.PDF
通过 C# 向 PDF 添加动作可集成多种交互元素,从而增强用户体验,例如导航按钮、文件链接或音效触发器。借助 Spire.PDF for .NET 库,开发者可以利用关键类和方法创建各种动作。以下是使用 Spire.PDF for .NET 添加 PDF 动作的一般流程:
通过 PdfGoToAction 类可以创建导航动作,允许在文档内导航到指定目标位置。为实现这一功能,开发者可以创建一个 PdfDestination 对象,并将其作为参数传递给 PdfGoToAction 实例,然后将其添加到 PDF 文档中。以下是在 PDF 中添加导航动作的代码示例:
using Spire.Pdf;
using Spire.Pdf.Actions;
using Spire.Pdf.Annotations;
using Spire.Pdf.General;
using Spire.Pdf.Graphics;
using System.Drawing;
namespace AddNavigationButtonPDF
{
class Program
{
static void Main(string[] args)
{
// 创建 PdfDocument 的实例
PdfDocument pdf = new PdfDocument();
// 加载 PDF 文件
pdf.LoadFromFile("示例.pdf");
// 创建 PdfDestination 实例并设置目标位置
PdfDestination destination = new PdfDestination(pdf.Pages[1]);
destination.Location = new PointF(0, 0);
destination.Mode = PdfDestinationMode.Location;
destination.Zoom = 0.8f;
// 基于目标位置创建 PdfGoToAction 实例
PdfGoToAction action = new PdfGoToAction(destination);
// 创建矩形并绘制到第一页
RectangleF rect = new RectangleF(70, pdf.PageSettings.Size.Height - 120, 140, 20);
pdf.Pages[0].Canvas.DrawRectangle(PdfBrushes.LightGray, rect);
// 在矩形中绘制文本
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("HarmonyOS Sans SC", 14f, FontStyle.Bold), true);
PdfStringFormat stringFormat = new PdfStringFormat(PdfTextAlignment.Center);
pdf.Pages[0].Canvas.DrawString("跳转到第2页", font, PdfBrushes.Green, rect, stringFormat);
// 基于矩形和动作创建 PdfActionAnnotation 实例
PdfActionAnnotation actionAnnotation = new PdfActionAnnotation(rect, action);
// 将动作注释添加到第一页
pdf.Pages[0].Annotations.Add(actionAnnotation);
// 保存文档
pdf.SaveToFile("output/导航动作.pdf");
pdf.Close();
}
}
}

PdfLaunchAction 类用于创建 PDF 中的文件打开动作,允许用户通过点击 PDF 页面上的按钮等方式时打开指定文件。在实现此动作时,开发者可以设置文件路径(绝对路径或相对路径),并决定文件是否在新窗口中打开。以下是为 PDF 文档添加文件打开动作的代码示例:
using Spire.Pdf;
using Spire.Pdf.Actions;
using Spire.Pdf.Annotations;
using Spire.Pdf.Graphics;
using System.Drawing;
namespace AddFileLaunchActionPDF
{
class Program
{
static void Main(string[] args)
{
// 创建 PdfDocument 的实例
PdfDocument pdf = new PdfDocument();
// 加载 PDF 文件
pdf.LoadFromFile("示例.pdf");
// 获取第一页
PdfPageBase page = pdf.Pages[0];
// 在页面上绘制矩形
RectangleF rect = new RectangleF(50, 50, 180, 20);
page.Canvas.DrawRectangle(PdfBrushes.LightGray, rect);
// 在矩形内绘制文本
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("HarmonyOS Sans SC", 14f, FontStyle.Bold), true);
PdfStringFormat stringFormat = new PdfStringFormat(PdfTextAlignment.Center);
pdf.Pages[0].Canvas.DrawString("点击打开 示例2.pdf", font, PdfBrushes.Green, rect, stringFormat);
// 创建 PdfLaunchAction 实例
PdfLaunchAction action = new PdfLaunchAction("C:/示例2.pdf", PdfFilePathType.Absolute);
// 设置启动模式为在新窗口中打开
action.IsNewWindow = true;
// 基于矩形和启动动作创建 PdfActionAnnotation 实例
PdfActionAnnotation actionAnnotation = new PdfActionAnnotation(rect, action);
// 将动作注释添加到第一页
page.Annotations.Add(actionAnnotation);
// 保存文档
pdf.SaveToFile("output/文件打开动作.pdf");
pdf.Close();
}
}
}

开发者可以通过 PdfSoundAction 类将音频嵌入到 PDF 文档中,使音频在响应特定触发事件时播放,例如打开文件或点击按钮。以下是在 PDF 文档中创建音效动作的代码示例:
using Spire.Pdf;
using Spire.Pdf.Actions;
using Spire.Pdf.Annotations;
using Spire.Pdf.Graphics;
using Spire.Pdf.General;
using System.Drawing;
namespace AddSoundActionPDF
{
class Program
{
static void Main(string[] args)
{
// 创建 PdfDocument 的实例
PdfDocument pdf = new PdfDocument();
// 加载 PDF 文件
pdf.LoadFromFile("示例.pdf");
// 获取第一页
PdfPageBase page = pdf.Pages[0];
// 在页面上绘制提示图像
PdfImage image = PdfImage.FromFile("Sound.png");
page.Canvas.DrawImage(image, new PointF(30, 30));
// 创建 PdfSoundAction 实例并设置其属性
PdfSoundAction action = new PdfSoundAction("Wave.wav");
// 设置声音参数
action.Sound.Bits = 16;
action.Sound.Channels = PdfSoundChannels.Stereo;
action.Sound.Encoding = PdfSoundEncoding.Signed;
action.Sound.Rate = 44100;
// 设置播放选项
action.Volume = 0;
action.Repeat = true;
action.Mix = true;
action.Synchronous = true;
// 基于提示图像的位置创建 PdfActionAnnotation 实例,用于声音动作
RectangleF rect = new RectangleF(30, 30, image.Width, image.Height);
PdfActionAnnotation actionAnnotation = new PdfActionAnnotation(rect, action);
// 将动作注释添加到第一页
page.Annotations.Add(actionAnnotation);
// 设置在文档打开后播放声音动作
pdf.AfterOpenAction = action;
// 保存文档
pdf.SaveToFile("output/声音动作.pdf");
pdf.Close();
}
}
}

开发者可以使用 PdfUriAction 类在 PDF 文档中创建网页链接动作,允许用户在执行特定操作(如点击按钮)时打开一个网页链接。以下是在 PDF 文档中创建网页链接动作的代码示例:
using Spire.Pdf;
using Spire.Pdf.Actions;
using Spire.Pdf.Annotations;
using Spire.Pdf.Graphics;
using System.Drawing;
namespace AddSoundActionPDF
{
class Program
{
static void Main(string[] args)
{
// 创建 PdfDocument 的实例
PdfDocument pdf = new PdfDocument();
// 加载 PDF 文件
pdf.LoadFromFile("示例.pdf");
// 获取第一页
PdfPageBase page = pdf.Pages[0];
// 在页面上绘制矩形
RectangleF rect = new RectangleF(30, 30, 120, 20);
page.Canvas.DrawRectangle(PdfBrushes.LightGray, rect);
// 在矩形内绘制文本
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("HarmonyOS Sans SC", 14f, FontStyle.Bold), true);
PdfStringFormat stringFormat = new PdfStringFormat(PdfTextAlignment.Center);
page.Canvas.DrawString("点击跳转至百度搜索", font, PdfBrushes.LightSkyBlue, rect);
// 创建 PdfUriAction 实例并设置其属性
PdfUriAction action = new PdfUriAction();
action.Uri = "https://www.baidu.com/";
// 使用网页链接动作和矩形创建 PdfActionAnnotation 实例
PdfActionAnnotation actionAnnotation = new PdfActionAnnotation(rect, action);
// 将动作注释添加到第一页
page.Annotations.Add(actionAnnotation);
// 保存文档
pdf.SaveToFile("output/网页链接动作.pdf");
pdf.Close();
}
}
}

PdfJavaScriptAction 代表 PDF 中的 JavaScript 动作,它可以帮助开发人员创建复杂的交互,如表单验证、数据计算和自定义用户界面。下面是用 C# 在 PDF 文档中添加简单的 JavaScript 动作的代码示例:
using Spire.Pdf;
using Spire.Pdf.Actions;
namespace AddJavaScriptActionPDF
{
class Program
{
static void Main(string[] args)
{
// 创建PdfDocument实例
PdfDocument pdf = new PdfDocument();
// 载入PDF文件
pdf.LoadFromFile("示例.pdf");
// 定义JavaScript代码
var jsCode =
"app.alert({" +
" cMsg: '欢迎阅读《火星:太阳系中的红色行星》。\\n\\n本文将详细介绍火星的基本信息、探索历史及其重要里程碑。', " +
" nIcon: 3, " +
" cTitle: '文档介绍'" +
"});";
// 使用JavaScript代码作为参数创建PdfJavaScriptAction实例
PdfJavaScriptAction action = new PdfJavaScriptAction(jsCode);
// 将创建的JavaScript动作设置为文档打开时执行
pdf.AfterOpenAction = action;
// 保存文档
pdf.SaveToFile("output/PDFJavaScript动作.pdf");
pdf.Close();
}
}
}

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.Presentation for Python 9.11.2 已发布。本次更新修复了一些已知问题,如从 PPT 文档中提取的图片大小不正确的问题,以及保存幻灯片到图片时程序抛 "ArgumentNullException" 错误的问题。详情请阅读以下内容。
问题修复:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-Python.html
PDF 表单作为一种标准化的电子文档格式,广泛应用于各类在线表单、调查问卷、合同和申请表等。然而,为了提高数据处理效率和集成度,很多时候需要将 PDF 表单的数据导入到其他格式(如 FDF、XFDF 和 XML),或将外部数据导入到 PDF 表单中。本文将介绍如何使用 Spire.PDF for Java 和 Java 在 PDF 表单和 FDF、XFDF、XML 格式之间进行数据的导入和导出。
首先,您需要在 Java 程序中添加 Spire.Pdf.jar 文件作为依赖项。JAR 文件可以从此链接下载。如果您使用 Maven,则可以将以下代码添加到项目的 pom.xml 文件中,从而在应用程序中导入 JAR 文件。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>12.9.0</version>
</dependency>
</dependencies>
Spire.PDF for Java 提供了 PdfFormWidget.importData() 方法用于从 FDF、XFDF 或 XML 文件中导入 PDF 表单数据。详细步骤如下:
import com.spire.pdf.PdfDocument;
import com.spire.pdf.fields.PdfForm;
import com.spire.pdf.widget.DataFormat;
import com.spire.pdf.widget.PdfFormWidget;
public class ImportData {
public static void main(String[] args) {
// 创建 PdfDocument 类的对象
PdfDocument pdf = new PdfDocument();
// 加载 PDF 文档
pdf.loadFromFile("表单.pdf");
// 获取文档的表单
PdfFormWidget formWidget = (PdfFormWidget)pdf.getForm();
// 从 XML 文件导入 PDF 表单数据
formWidget.importData("数据.xml", DataFormat.Xml);
// 从 FDF 文件导入 PDF 表单数据
// formWidget.importData("数据.fdf", DataFormat.Fdf);
// 从 XFDF 文件导入 PDF 表单数据
// formWidget.importData("数据.xfdf", DataFormat.X_Fdf);
// 保存生成的文档
pdf.saveToFile("输出.pdf");
// 关闭 PdfDocument 对象
pdf.close();
}
}

Spire.PDF for Java 还提供了 PdfFormWidget.exportData() 方法,支持将 PDF 表单数据导出为 FDF、XFDF 或 XML 文件。详细步骤如下:
import com.spire.pdf.PdfDocument;
import com.spire.pdf.widget.DataFormat;
import com.spire.pdf.widget.PdfFormWidget;
public class ExportData {
public static void main(String[] args) {
// 创建 PdfDocument 类的对象
PdfDocument pdf = new PdfDocument();
// 加载 PDF 文档
pdf.loadFromFile("表单.pdf");
// 获取文档的表单
PdfFormWidget formWidget = (PdfFormWidget)pdf.getForm();
// 将 PDF 表单数据导出到 XML 文件
formWidget.exportData("数据.xml", DataFormat.Xml, "表单");
// 将 PDF 表单数据导出到 FDF 文件
// formWidget.exportData("数据.fdf", DataFormat.Fdf, "表单");
// 将 PDF 表单数据导出到 XFDF 文件
// formWidget.exportData("数据.xfdf", DataFormat.X_Fdf, "表单");
// 关闭 PdfDocument 对象
pdf.close();
}
}

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.PDF for Python 10.11.0 现已正式发布。该版本支持 macOS 操作系统,这意味着开发人员现在能在 MAC 平台上通过 Python 代码实现创建、读取、编辑、转换 PDF 文档等,体验高效的 PDF 处理性能。详情请查阅以下内容。
新功能:
在 Word 中插入段落是创建结构合理、条理清晰文档的一项基本技能。段落可以将大段文字分割开来,使读者更容易顺着思路找到具体信息。在 Word 中,您可以添加新段落来表示新观点或添加其他信息。本文将演示如何使用 Spire.Doc for .NET 在 Word 文档中插入新段落。
首先,您需要将 Spire.Doc for .NET 包含的 DLL 文件作为引用添加到您的 .NET 项目中。DLL 文件可以从此链接下载,也可以通过 NuGet 安装。
PM> Install-Package Spire.Doc
要在文档末尾添加一个新段落,需要先通过 Document.LastSection 属性获取 Word 文档的最后一节,然后再通过 Section.AddParagraph() 方法在该节末尾添加一个段落。具体步骤如下:
using Spire.Doc;
using Spire.Doc.Documents;
using System.Drawing;
namespace AddParagraph
{
class Program
{
static void Main(string[] args)
{
//创建Document对象
Document doc = new Document();
//加载Word文档
doc.LoadFromFile("测试.docx");
//获取最后一节
Section section = doc.LastSection;
//在该节末尾添加段落
Paragraph para = section.AddParagraph();
para.AppendText("在文档末尾添加新段落。");
//设置段落样式
ParagraphStyle style = new ParagraphStyle(doc);
style.Name = "Style1";
style.CharacterFormat.FontName = "宋体";
style.CharacterFormat.FontSize = 12;
style.CharacterFormat.TextColor = Color.Blue;
style.CharacterFormat.Bold = true;
doc.Styles.Add(style);
para.ApplyStyle("Style1");
para.Format.BeforeSpacing = 10;
//保存结果文件
doc.SaveToFile("添加段落.docx", FileFormat.Docx2016);
}
}
}

您还可以先添加新段落,然后通过 Section.Paragraphs.Insert(int index, IParagraph paragraph) 方法将其插入到文档指定位置处。具体步骤如下:
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Drawing;
namespace InsertParagraph
{
class Program
{
static void Main(string[] args)
{
//创建Document对象
Document doc = new Document();
//加载Word文档
doc.LoadFromFile("测试.docx");
//获取第一节
Section section = doc.Sections[0];
//添加段落并设置其文本内容
Paragraph para = section.AddParagraph();
TextRange textRange = para.AppendText("在文档中间指定位置插入段落。");
//设置字体名称、大小、颜色和样式
textRange.CharacterFormat.TextColor = Color.Blue;
textRange.CharacterFormat.FontName = "宋体";
textRange.CharacterFormat.FontSize = 14;
textRange.CharacterFormat.UnderlineStyle = UnderlineStyle.Single;
//将添加的段落插入作为第三段
section.Paragraphs.Insert(2, para);
//设置段落间距
para.Format.AfterSpacing = 10;
//保存结果文件
doc.SaveToFile("插入段落.docx", FileFormat.Docx2016);
}
}
}

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Excel 和 Word 是日常办公中常用的两种文档格式。Excel 更适合处理复杂的数据计算与分析,而 Word 则擅长排版和增强文档的视觉效果。在制作报告或演示文档时,许多专业人士需要将 Excel 数据转入 Word 表格,以利用 Word 的格式化功能,从而提升文档的专业性和可读性。这篇文章将介绍如何使用 Spire.Office for Python 在 Python 中将 Excel 数据转换为 Word 表格并保留格式。
本教程需要 Spire.Office for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Office
该功能用到了 Spire.Office for Python 包中的两个库:Spire.XLS for Python 和 Spire.Doc for Python。前者用于读取 Excel 工作表中的数据和格式,后者用于创建 Word 文档并将数据(包括格式)写入表格。为了使代码示例易于理解,我们创建了以下两个自定义方法来实现特定的功能:
以下步骤展示了如何使用 Spire.Office for Python 将 Excel 工作表中的数据转换为Word 表格并保留格式:
from spire.xls import *
from spire.doc import *
def MergeCells(sheet, table):
"根据 Excel 工作表中的合并单元格合并 Word 表格中的对应单元格"
if sheet.HasMergedCells:
ranges = sheet.MergedCells
for i in range(len(ranges)):
startRow = ranges[i].Row
startColumn = ranges[i].Column
rowCount = ranges[i].RowCount
columnCount = ranges[i].ColumnCount
if rowCount > 1 and columnCount > 1:
for j in range(startRow, startRow + rowCount):
table.ApplyHorizontalMerge(j - 1, startColumn - 1, startColumn - 1 + columnCount - 1)
table.ApplyVerticalMerge(startColumn - 1, startRow - 1, startRow - 1 + rowCount - 1)
if rowCount > 1 and columnCount == 1:
table.ApplyVerticalMerge(startColumn - 1, startRow - 1, startRow - 1 + rowCount - 1)
if columnCount > 1 and rowCount == 1:
table.ApplyHorizontalMerge(startRow - 1, startColumn - 1, startColumn - 1 + columnCount - 1)
def CopyStyle(wTextRange, xCell, wCell):
"将单元格样式从 Excel 复制到 Word"
# 复制字体样式
wTextRange.CharacterFormat.TextColor = Color.FromRgb(xCell.Style.Font.Color.R, xCell.Style.Font.Color.G, xCell.Style.Font.Color.B)
wTextRange.CharacterFormat.FontSize = float(xCell.Style.Font.Size)
wTextRange.CharacterFormat.FontName = xCell.Style.Font.FontName
wTextRange.CharacterFormat.Bold = xCell.Style.Font.IsBold
wTextRange.CharacterFormat.Italic = xCell.Style.Font.IsItalic
# 复制背景颜色
if xCell.Style.FillPattern is not ExcelPatternType.none:
wCell.CellFormat.Shading.BackgroundPatternColor = Color.FromRgb(xCell.Style.Color.R, xCell.Style.Color.G, xCell.Style.Color.B)
# 复制水平对齐方式
if xCell.HorizontalAlignment == HorizontalAlignType.Left:
wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Left
elif xCell.HorizontalAlignment == HorizontalAlignType.Center:
wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Center
elif xCell.HorizontalAlignment == HorizontalAlignType.Right:
wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Right
# 复制垂直对齐方式
if xCell.VerticalAlignment == VerticalAlignType.Bottom:
wCell.CellFormat.VerticalAlignment = VerticalAlignment.Bottom
elif xCell.VerticalAlignment == VerticalAlignType.Center:
wCell.CellFormat.VerticalAlignment = VerticalAlignment.Middle
elif xCell.VerticalAlignment == VerticalAlignType.Top:
wCell.CellFormat.VerticalAlignment = VerticalAlignment.Top
# 加载 Excel 文件
workbook = Workbook()
workbook.LoadFromFile("Contact list.xlsx")
# 获取第一个工作表
sheet = workbook.Worksheets.get_Item(0)
# 创建 Word 文档
doc = Document()
section = doc.AddSection()
section.PageSetup.Orientation = PageOrientation.Landscape
# 添加表格
table = section.AddTable(True)
table.ResetCells(sheet.LastRow, sheet.LastColumn)
# 根据 Excel 工作表中的合并单元格合并 Word 表格中的对应单元格
MergeCells(sheet, table)
# 从 Excel 导出数据和单元格样式到 Word 表格
for r in range(1, sheet.LastRow + 1):
table.Rows[r - 1].Height = float(sheet.Rows[r - 1].RowHeight)
for c in range(1, sheet.LastColumn + 1):
xCell = sheet.Range[r, c]
wCell = table.Rows[r - 1].Cells[c - 1]
# 复制数据
textRange = wCell.AddParagraph().AppendText(xCell.NumberText)
# 复制单元格样式
CopyStyle(textRange, xCell, wCell)
# 将 Word 文档保存到文件
doc.SaveToFile("Excel转Word表格.docx", "FileFormat.Docx")

如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。

在 .NET 开发中,经常会遇到处理 Excel 数据的场景。为了便于结构化管理,开发者通常会将 Excel 文件转换为 DataTable。这样不仅能够方便地执行 LINQ 查询,还能轻松绑定到 DataGridView 等 UI 控件,甚至批量写入数据库。
然而,在 C# 中实现 Excel 转换为 DataTable 并非总是直观易行。传统方法往往依赖 OLEDB 驱动,或者需要编写复杂的 OpenXML 代码——前者依赖额外组件,后者实现繁琐。
本文将介绍一种更简洁高效的方式,使用 Spire.XLS for .NET 直接通过 C# 代码完成 Excel 到 DataTable 的转换,支持整表导入或指定区域导出,无需外部依赖,也避免了冗余代码。
快速导航
在 C# 中,DataTable 是一种驻留在内存中的表格化数据结构,常用于处理来自 Excel、数据库或其他数据源的数据。它的优势包括:
与 DataSet 相比,DataTable 更加轻量,尤其适合处理单个工作表或指定数据范围。
在开始之前,需要在项目中安装 Spire.XLS for .NET。通过 NuGet 安装最为简便:
Install-Package Spire.XLS
然后在代码中引入所需的命名空间:
using Spire.Xls;
using System.Data;
下面的示例展示了如何加载 Excel 文件并将其数据导入到 DataTable 中。此方法不依赖 OLEDB,也不需要 Microsoft Office 环境,因此既适用于桌面应用,也能在服务端稳定运行。
Workbook workbook = new Workbook();
workbook.LoadFromFile("Sample.xlsx");
以上代码会从指定路径加载 Excel 文件,并生成 Workbook 对象,之后即可访问其中的工作表。
Worksheet sheet = workbook.Worksheets[0];
DataTable dataTable = sheet.ExportDataTable(sheet.AllocatedRange, true);
这段代码会将第一张工作表的所有数据导入 DataTable:
这种方式适合需要完整导入表格的场景,例如绑定到 DataGridView 或批量写入数据库。
DataTable partialTable = sheet.ExportDataTable(sheet.Range["A1:C10"], true);
该方法只会将 A1:C10 区域的数据导入 DataTable。 在处理大型文件时,这种按需提取的方式尤其实用,比如仅导入报表中的部分内容。
下面的示例展示了从加载 Excel 文件到导出 DataTable 并输出结果的完整流程:
using Spire.Xls;
using System.Data;
class Program
{
static void Main()
{
// 加载 Excel 文件
Workbook workbook = new Workbook();
workbook.LoadFromFile("Sample.xlsx");
// 将第一个工作表导出为 DataTable
Worksheet sheet = workbook.Worksheets[0];
DataTable dataTable = sheet.ExportDataTable(sheet.AllocatedRange, true);
// 输出行数
Console.WriteLine("Rows imported: " + dataTable.Rows.Count);
// 输出列名
foreach (DataColumn col in dataTable.Columns)
{
Console.Write(col.ColumnName + "\t");
}
Console.WriteLine();
// 输出所有数据
foreach (DataRow row in dataTable.Rows)
{
foreach (var item in row.ItemArray)
{
Console.Write(item + "\t");
}
Console.WriteLine();
}
}
}
运行后,程序会将 Excel 第一张工作表中的数据导出为 DataTable,并在控制台输出结果:

如果需要逐个单元格读取数据,请参考 在 C# 中读取 Excel 文件。
有时还需要将修改后的 DataTable 数据重新写入 Excel 文件。可以使用如下方法实现:
Workbook wb = new Workbook();
Worksheet ws = wb.Worksheets[0];
// 假设 dataTable 已经有数据
ws.InsertDataTable(dataTable, true, 1, 1);
wb.SaveToFile("Output.xlsx", ExcelVersion.Version2016);
这段代码会从 A1 单元格开始插入 DataTable 数据,并保存为新文件,从而实现 Excel 与 C# 之间的数据双向交互。 详细教程请参考:在 C# 中将 DataTable 导出到 Excel。
当处理数据量较大的 Excel 文件时,可以考虑以下优化策略:
Spire.XLS 同时支持 .xls、.xlsx 和 .csv 格式,能够灵活应对不同应用场景。
在进行 Excel 与 DataTable 转换时,建议注意以下几点:
在 .NET 开发中,将 Excel 数据转换为 DataTable 是一项常见且重要的任务。借助 Spire.XLS for .NET,开发者无需依赖 OLEDB 驱动或繁琐的 OpenXML 编程,即可高效完成转换。
无论是整表导入、区域提取,还是将数据回写到 Excel,都能通过简洁直观的方式实现。掌握这一流程,将显著提升 Excel 与 C# 应用之间的集成效率与稳定性。
如果需要完整功能,可以 申请免费临时授权。对于小型项目,还可以使用 Free Spire.XLS for .NET。
使用 Worksheet.ExportDataTable() 方法即可直接导入。
可以。Spire.XLS 不依赖 OLEDB,也无需安装 Microsoft Office。
将目标 Worksheet 或 Range 传入 ExportDataTable() 方法即可。
可以。使用 Worksheet.InsertDataTable() 并调用 SaveToFile() 保存文件。