冰蓝科技
|
028-81705109
|
|
微信扫一扫
|

Spire.Cloud 纯前端文档控件

Spire.XLS for Python 14.9.3 已发布。本次更新新增支持 在将 Excel 转换为 PDF 时决定是否保留原始的页面尺寸,同时增强了 Excel 到 PDF 和图表工作表到 PDF 的转换功能。此外,一些已知问题也在该版本中成功修复,如在 ubuntu22 上设置字体样式时抛出异常的问题。详情请阅读以下内容。

新功能:

问题修复:


获取 Spire.XLS for Python 14.9.3,请点击:

https://www.e-iceblue.cn/Downloads/Spire-XLS-Python.html

Spire.XLS 14.11.3 现已发布。该版本支持传递值对透视表进行分组, 还支持新公式 ACOT、ACOTH、COT、TOROW、TOCOL。此外,一些在加载、保存、转换和打印 Excel 文档时出现的问题也已成功解决。新功能及问题修复详情如下。

新功能:

问题修复:


下载 Spire.XLS 14.11.3,请点击:

https://www.e-iceblue.cn/Downloads/Spire-XLS-NET.html

Spire.Presentation for Java 9.11.3 现已正式发布。最新版本优化了转换 PowerPoint 为图像时的清晰度。此外,一些已知问题也在本次更新中被成功修复,例如使用 ISmartArtNode.getTextFrame().getTextLocation() 程序抛 "ClassCastException" 错误的问题。详情请查看以下内容。

问题修复:


获取 Spire.Presentation for Java 9.11.3 请点击:

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

首先,您需要添加 Spire.PDF for .NET 包中包含的 DLL 文件作为 .NET 项目中的引用。DLL 文件可以从此链接下载或通过 NuGet 安装。

PM> Install-Package Spire.PDF

用 C# 向 PDF 添加动作的操作步骤

通过 C# 向 PDF 添加动作可集成多种交互元素,从而增强用户体验,例如导航按钮、文件链接或音效触发器。借助 Spire.PDF for .NET 库,开发者可以利用关键类和方法创建各种动作。以下是使用 Spire.PDF for .NET 添加 PDF 动作的一般流程:

用 C# 在 PDF 中创建导航动作

通过 PdfGoToAction 类可以创建导航动作,允许在文档内导航到指定目标位置。为实现这一功能,开发者可以创建一个 PdfDestination 对象,并将其作为参数传递给 PdfGoToAction 实例,然后将其添加到 PDF 文档中。以下是在 PDF 中添加导航动作的代码示例:

  • C#
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();
        }
    }
}

用 C# 在 PDF 中创建导航动作

用 C# 在 PDF 中创建文件打开动作

PdfLaunchAction 类用于创建 PDF 中的文件打开动作,允许用户通过点击 PDF 页面上的按钮等方式时打开指定文件。在实现此动作时,开发者可以设置文件路径(绝对路径或相对路径),并决定文件是否在新窗口中打开。以下是为 PDF 文档添加文件打开动作的代码示例:

  • C#
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();
        }
    }
}

用 C# 在 PDF 中创建文件打开动作

用 C# 在 PDF 中创建音频动作

开发者可以通过 PdfSoundAction 类将音频嵌入到 PDF 文档中,使音频在响应特定触发事件时播放,例如打开文件或点击按钮。以下是在 PDF 文档中创建音效动作的代码示例:

  • C#
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();
        }
    }
}

用 C# 在 PDF 中创建音频动作

用 C# 在 PDF 中创建网页链接动作

开发者可以使用 PdfUriAction 类在 PDF 文档中创建网页链接动作,允许用户在执行特定操作(如点击按钮)时打开一个网页链接。以下是在 PDF 文档中创建网页链接动作的代码示例:

  • C#
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();
        }
    }
}

用 C# 在 PDF 中创建网页链接动作

用 C# 在 PDF 中创建 JavaScript 动作

PdfJavaScriptAction 代表 PDF 中的 JavaScript 动作,它可以帮助开发人员创建复杂的交互,如表单验证、数据计算和自定义用户界面。下面是用 C# 在 PDF 文档中添加简单的 JavaScript 动作的代码示例:

  • C#
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();
        }
    }
}

用 C# 在 PDF 中创建 JavaScript 动作

申请临时 License

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

Spire.Presentation for Python 9.11.2 已发布。本次更新修复了一些已知问题,如从 PPT 文档中提取的图片大小不正确的问题,以及保存幻灯片到图片时程序抛 "ArgumentNullException" 错误的问题。详情请阅读以下内容。

问题修复:


获取 Spire.Presentation for Python 9.11.2 请点击:

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 格式之间进行数据的导入和导出。

安装 Spire.PDF for Java

首先,您需要在 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>

Java 从 FDF、XFDF 或 XML 文件导入 PDF 表单数据

Spire.PDF for Java 提供了 PdfFormWidget.importData() 方法用于从 FDF、XFDF 或 XML 文件中导入 PDF 表单数据。详细步骤如下:

  • Java
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();
    }
}

Java 从 FDF、XFDF 或 XML 文件导入 PDF 表单数据

Java 将 PDF 表单数据导出为 FDF、XFDF 或 XML 文件

Spire.PDF for Java 还提供了 PdfFormWidget.exportData() 方法,支持将 PDF 表单数据导出为 FDF、XFDF 或 XML 文件。详细步骤如下:

  • Java
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();
    }
}

Java 将 PDF 表单数据导出为 FDF、XFDF 或 XML 文件

申请临时 License

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

Spire.PDF for Python 10.11.0 现已正式发布。该版本支持 macOS 操作系统,这意味着开发人员现在能在 MAC 平台上通过 Python 代码实现创建、读取、编辑、转换 PDF 文档等,体验高效的 PDF 处理性能。详情请查阅以下内容。

新功能:


获取 Spire.PDF for Python 10.11.0 请点击:

https://www.e-iceblue.cn/Downloads/Spire-PDF-Python.html

在 Word 中插入段落是创建结构合理、条理清晰文档的一项基本技能。段落可以将大段文字分割开来,使读者更容易顺着思路找到具体信息。在 Word 中,您可以添加新段落来表示新观点或添加其他信息。本文将演示如何使用 Spire.Doc for .NET 在 Word 文档中插入新段落。

安装 Spire.Doc for .NET

首先,您需要将 Spire.Doc for .NET 包含的 DLL 文件作为引用添加到您的 .NET 项目中。DLL 文件可以从此链接下载,也可以通过 NuGet 安装。

PM> Install-Package Spire.Doc

C# 在 Word 文档末尾添加段落

要在文档末尾添加一个新段落,需要先通过 Document.LastSection 属性获取 Word 文档的最后一节,然后再通过 Section.AddParagraph() 方法在该节末尾添加一个段落。具体步骤如下:

  • C#
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);
        }
    }
}

C# 在 Word 文档末尾添加段落

C# 在 Word 中的指定位置插入段落

您还可以先添加新段落,然后通过 Section.Paragraphs.Insert(int index, IParagraph paragraph) 方法将其插入到文档指定位置处。具体步骤如下:

  • C#
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);
        }
    }
}

C# 在 Word 中的指定位置插入段落

申请临时 License

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

Excel 和 Word 是日常办公中常用的两种文档格式。Excel 更适合处理复杂的数据计算与分析,而 Word 则擅长排版和增强文档的视觉效果。在制作报告或演示文档时,许多专业人士需要将 Excel 数据转入 Word 表格,以利用 Word 的格式化功能,从而提升文档的专业性和可读性。这篇文章将介绍如何使用 Spire.Office for Python 在 Python 中将 Excel 数据转换为 Word 表格并保留格式。

安装 Spire.Office for Python

本教程需要 Spire.Office for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。

pip install Spire.Office

Python 将 Excel 数据转换为 Word 表格并保留格式

该功能用到了 Spire.Office for Python 包中的两个库:Spire.XLS for Python 和 Spire.Doc for Python。前者用于读取 Excel 工作表中的数据和格式,后者用于创建 Word 文档并将数据(包括格式)写入表格。为了使代码示例易于理解,我们创建了以下两个自定义方法来实现特定的功能:

以下步骤展示了如何使用 Spire.Office for Python 将 Excel 工作表中的数据转换为Word 表格并保留格式:

  • Python
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")

Python 将 Excel 数据转换为 Word 表格并保留格式

申请临时 License

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

C# Excel 转 DataTable 示例

在 .NET 开发中,经常会遇到处理 Excel 数据的场景。为了便于结构化管理,开发者通常会将 Excel 文件转换为 DataTable。这样不仅能够方便地执行 LINQ 查询,还能轻松绑定到 DataGridView 等 UI 控件,甚至批量写入数据库。

然而,在 C# 中实现 Excel 转换为 DataTable 并非总是直观易行。传统方法往往依赖 OLEDB 驱动,或者需要编写复杂的 OpenXML 代码——前者依赖额外组件,后者实现繁琐。
本文将介绍一种更简洁高效的方式,使用 Spire.XLS for .NET 直接通过 C# 代码完成 Excel 到 DataTable 的转换,支持整表导入或指定区域导出,无需外部依赖,也避免了冗余代码。

快速导航

什么是 DataTable,为什么要使用它?

在 C# 中,DataTable 是一种驻留在内存中的表格化数据结构,常用于处理来自 Excel、数据库或其他数据源的数据。它的优势包括:

  • 以表格形式存储 Excel 数据;
  • 支持过滤、排序和 LINQ 查询;
  • 可直接绑定到 DataGridView 等 UI 控件;
  • 便于批量写入数据库。

与 DataSet 相比,DataTable 更加轻量,尤其适合处理单个工作表或指定数据范围。

环境准备

在开始之前,需要在项目中安装 Spire.XLS for .NET。通过 NuGet 安装最为简便:

Install-Package Spire.XLS

然后在代码中引入所需的命名空间:

using Spire.Xls;
using System.Data;

在 C# 中将 Excel 转换为 DataTable

下面的示例展示了如何加载 Excel 文件并将其数据导入到 DataTable 中。此方法不依赖 OLEDB,也不需要 Microsoft Office 环境,因此既适用于桌面应用,也能在服务端稳定运行。

加载 Excel 文件

Workbook workbook = new Workbook();
workbook.LoadFromFile("Sample.xlsx");

以上代码会从指定路径加载 Excel 文件,并生成 Workbook 对象,之后即可访问其中的工作表。

将整个工作表导入 DataTable

Worksheet sheet = workbook.Worksheets[0];
DataTable dataTable = sheet.ExportDataTable(sheet.AllocatedRange, true);

这段代码会将第一张工作表的所有数据导入 DataTable:

  • sheet.AllocatedRange 表示已使用的单元格区域;
  • true 参数表示第一行作为列名导入。

这种方式适合需要完整导入表格的场景,例如绑定到 DataGridView 或批量写入数据库。

将指定范围导入 DataTable

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 输出效果

如果需要逐个单元格读取数据,请参考 在 C# 中读取 Excel 文件。

扩展:将 DataTable 导出回 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 文件与性能优化

当处理数据量较大的 Excel 文件时,可以考虑以下优化策略:

  • 只加载所需工作表,避免一次性加载整个文件;
  • 导出指定范围,而非整张表;
  • 使用 LoadFromStream 方式加载,避免文件锁定问题;
  • 对于超大 DataTable,逐行处理以降低内存占用。

Spire.XLS 同时支持 .xls、.xlsx 和 .csv 格式,能够灵活应对不同应用场景。

最佳实践

在进行 Excel 与 DataTable 转换时,建议注意以下几点:

  • 数据类型转换:Excel 默认以文本存储,必要时需转为 int、decimal 或 DateTime;
  • 空值处理:提前检查空单元格,避免运行时错误;
  • 数据库集成:在将 DataTable 批量写入数据库前,应先进行数据验证和清理。

总结

在 .NET 开发中,将 Excel 数据转换为 DataTable 是一项常见且重要的任务。借助 Spire.XLS for .NET,开发者无需依赖 OLEDB 驱动或繁琐的 OpenXML 编程,即可高效完成转换。

无论是整表导入、区域提取,还是将数据回写到 Excel,都能通过简洁直观的方式实现。掌握这一流程,将显著提升 Excel 与 C# 应用之间的集成效率与稳定性。

如果需要完整功能,可以 申请免费临时授权。对于小型项目,还可以使用 Free Spire.XLS for .NET。


常见问题

如何在 C# 中将 Excel 导入 DataTable?

使用 Worksheet.ExportDataTable() 方法即可直接导入。

能否在不依赖 OLEDB 的情况下读取 Excel?

可以。Spire.XLS 不依赖 OLEDB,也无需安装 Microsoft Office。

如何只读取指定工作表或范围?

将目标 Worksheet 或 Range 传入 ExportDataTable() 方法即可。

可以在 C# 中将 DataTable 导出回 Excel 吗?

可以。使用 Worksheet.InsertDataTable() 并调用 SaveToFile() 保存文件。