长叹一生当青春 發表於 2025-9-10 11:05:00

国产化Excel处理组件Spire.XLS教程:C# 读取 CSV 文件,从基础读取到 DataTable 转换

<p>CSV(逗号分隔值)作为轻量级数据交换格式,广泛应用于财务报表、用户数据、分析结果等场景。在.NET 开发中,高效处理和解析 CSV 文件是一项基础且重要的技能。本文将介绍如何借助<strong>Spire.XLS for .NET</strong>&nbsp;<strong>通过 C# 读取 CSV 文件</strong>,包括直接读取和将 CSV 转换为 DataTable 两种方式。</p>
<p>&nbsp;</p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>Spire.XLS for .NET试用下载,请联系E-iceblue官方授权代理商<span style="text-decoration: underline">慧都科技</span></strong></span></p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>欢迎加入Spire技术交流Q群(125237868),与更多小伙伴一起提升文档开发技能~</strong></span></p>
<p>&nbsp;</p>
<h2>安装 Spire.XLS 库</h2>
<p><strong><u>Spire.XLS for .NET&nbsp;</u></strong>不仅是专业的 Excel 处理工具,还对 CSV 文件提供了完善支持,无需依赖 Microsoft Office,处理效率高且跨平台兼容。</p>
<p><strong>安装步骤:</strong></p>
<ul>
<li>打开 Visual Studio 项目,在解决方案资源管理器中右键点击项目;</li>
<li>选择「管理 NuGet 包」,搜索「Spire.XLS」;</li>
<li>点击「安装」完成依赖添加。</li>
</ul>
<p>或通过程序包管理器控制台执行命令:</p>
<pre class="prettyprint lang-cs highlighter-hljs"><code>PM&gt; Install-Package Spire.XLS</code></pre>
<h2>C# 读取 CSV 文件内容</h2>
<p>以下 C# 代码示例演示如何加载 CSV 文件、访问其中数据,并以表格格式将内容输出到控制台。</p>
<pre class="prettyprint lang-cs highlighter-hljs"><code>using Spire.Xls;

namespace ReadCSV
{
    class Program
    {
      static void Main(string[] args)
      {
            // 创建 Workbook 实例
            Workbook workbook = new Workbook();

            // 加载 CSV 文件
            workbook.LoadFromFile("库存表.csv", ",");

            // 获取第一个工作表
            Worksheet sheet = workbook.Worksheets;

            // 获取已使用的范围
            CellRange range = sheet.AllocatedRange;

            // 遍历行和列
            for (int row = 1; row &lt;= range.RowCount; row++)
            {
                for (int col = 1; col &lt;= range.ColumnCount; col++)
                {
                  // 获取单元格值
                  string cellValue = range.Value;
                  Console.Write(cellValue + "\t");
                }
                Console.WriteLine();
            }

            Console.ReadLine();
      }
    }
}</code></pre>
<p><strong>核心说明:</strong></p>
<ul>
<li><strong>Workbook 类</strong>:作为 CSV 文件的内存容器,统一处理逻辑。</li>
<li><strong>Workbook.LoadFromFile()</strong>:用于加载 CSV 文件,参数说明如下:
<ul>
<li>文件路径:如"库存表.csv"。</li>
<li>分隔符:","(逗号 - CSV 的默认分隔符)。</li>
</ul>
</li>
<li><strong>Worksheet.AllocatedRange</strong>:仅获取包含数据的单元格范围。</li>
<li><strong>CellRange.Value</strong>:用于获取特定单元格的值。</li>
</ul>
<p><strong>运行效果</strong>:CSV 数据将以清晰的制表符分隔格式输出到控制台。</p>
<p><img src="https://image.evget.com/attachment/keditor/image/20250910/102526_2.png"></p>
<p><em>若需要通过 VB.NET 读取 CSV 文件,可使用</em>&nbsp;<em><strong>C# 到 VB.NET转换器</strong></em>&nbsp;<em>直接转换代码</em>。</p>
<h2>C# 读取 CSV 到 DataTable</h2>
<p>DataTable 是.NET 中灵活的内存数据结构,便于筛选、排序、绑定 UI 等高级操作。以下代码演示如何将 CSV 直接转换为 DataTable:</p>
<pre class="prettyprint lang-cs highlighter-hljs"><code>using Spire.Xls;
using System.Data;

namespace ReadCSV
{
    class Program
    {
      static void Main(string[] args)
      {
            // 创建 Workbook 实例
            Workbook workbook = new Workbook();

            // 加载 CSV 文件
            workbook.LoadFromFile("库存表.csv", ",");

            // 获取第一个工作表
            Worksheet worksheet = workbook.Worksheets;

            // 将工作表中的数据导出到 DataTable
            DataTable dataTable = worksheet.ExportDataTable();

            // 获取行和列的数量
            Console.WriteLine("\n转换完成!DataTable信息:");
            Console.WriteLine($"列数:{dataTable.Columns.Count}");
            Console.WriteLine($"行数:{dataTable.Rows.Count}");
            Console.WriteLine();

            // 打印列名
            for (int i = 0; i &lt; dataTable.Columns.Count; i++)
            {
                Console.Write(dataTable.Columns.ColumnName + "| ");
            }
            Console.WriteLine();
            Console.WriteLine("----------------------------------------------------------");

            // 打印行数据
            for (int i = 0; i &lt; dataTable.Rows.Count; i++)
            {
                for (int j = 0; j &lt; dataTable.Columns.Count; j++)
                {               
                  string value = dataTable.Rows.ToString();

                  Console.Write(value + "\t");
                }
                Console.WriteLine();
            }
      }
    }
}</code></pre>
<p><strong>核心说明:</strong></p>
<ul>
<li><strong>Worksheet.ExportDataTable()</strong>:一键完成 CSV 到 DataTable 的转换。</li>
<li><strong>元数据与内容访问</strong>:可通过 DataTable 的&nbsp;Columns&nbsp;和&nbsp;Rows&nbsp;属性快速获取元数据与内容。</li>
<li><strong>高级操作</strong>:转换后的数据支持与数据库、UI 组件(如 DataGridView)直接交互。</li>
</ul>
<p><strong>运行效果</strong>:输出包含列名、数据行及统计信息的结构化结果。</p>
<p><img src="https://image.evget.com/attachment/keditor/image/20250910/102945_0.png"></p>
<p><em>若需分析、计算或格式化数据,您可以</em><em><strong>通过 C# 将 CSV 转换为 Excel</strong></em>。</p>
<h2>两种方法的适用场景</h2>
<p>根据实际需求选择合适的方法:</p>
<table>
<thead>
<tr>
<th><strong>方法</strong></th>
<th><strong>适用场景</strong></th>
<th><strong>典型用例</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>直接读取 CSV</td>
<td>快速验证数据、简单打印输出</td>
<td>检查 CSV 文件是否正确加载、预览数据</td>
</tr>
<tr>
<td>转换为 DataTable</td>
<td>复杂数据处理、绑定 UI 或数据库</td>
<td>筛选行、排序数据或保存到SQL Server</td>
</tr>
</tbody>
</table>
<h2>结论</h2>
<p>借助&nbsp;<strong><u>Spire.XLS for .NET</u></strong>,C# 处理 CSV 文件变得简单高效:直接读取适用于快速验证,转换为 DataTable 则便于高级操作。两种方法均无需依赖 Office,且代码可直接复用(只需修改文件路径)。</p>
<h2>常见问题</h2>
<h3>问题1:为什么选择用 Spire.XLS 读取 CSV 文件?</h3>
<p><strong>答</strong>:虽然 .NET Framework 提供了内置的 StreamReader 处理 CSV 文件,但&nbsp;<strong><u>Spire.XLS&nbsp;</u></strong>的优势在于:</p>
<ul>
<li><strong>无需依赖</strong>:不需要安装 Microsoft Excel 或 Office</li>
<li><strong>高性能</strong>:针对大型 CSV 文件的高效处理进行了优化</li>
<li><strong>灵活性</strong>:提供多种读取 CSV 数据的方式,可按需选择</li>
<li><strong>跨平台</strong>:兼容.NET Framework/.NET Core/.NET Standard 等多框架</li>
</ul>
<h3>问题2:如何处理非逗号分隔的文件(如分号或制表符)?</h3>
<p><strong>答</strong>:只需将&nbsp;LoadFromFile()&nbsp;的第二个参数替换为实际分隔符即可:</p>
<pre class="prettyprint lang-cs highlighter-hljs"><code>// 读取制表符分隔的文件
workbook.LoadFromFile("data.txt", "\t");

// 读取分号分隔的文件
workbook.LoadFromFile("data.csv", ";");

// 读取竖线分隔的文件
workbook.LoadFromFile("data.csv", "|");</code></pre>
<h3>问题3:能否读取 CSV 中的指定行或列?</h3>
<p><strong>答</strong>:可以。通过定义范围实现精准读取,例如跳过标题行只取特定列:</p>
<pre class="prettyprint lang-cs highlighter-hljs"><code>// 定义特定范围
int startRow = 2;   // 从第2行开始(跳过标题)
int endRow = 4;   // 在第4行结束
int startCol = 2;   // 从第2列开始
int endCol = 6;   // 在第6列结束


// 遍历行和列
for (int row = startRow; row &lt;= endRow; row++)
{
   for (int col = startCol; col &lt;= endCol; col++)
   {
      // 获取单元格值
      string cellValue = worksheet.Range.Value;
      Console.Write(cellValue + "\t");
   }
   Console.WriteLine();
}</code></pre>
<p><strong>注意</strong>:<strong>Spire.XLS</strong>&nbsp;采用 1-based 索引(与Excel一致),因此第一行/列编号为1(而非0)。</p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>Spire.XLS for .NET试用下载,请联系E-iceblue官方授权代理商<span style="text-decoration: underline">慧都科技</span></strong></span></p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>欢迎加入Spire技术交流Q群(125237868),与更多小伙伴一起提升文档开发技能~</strong></span></p><br><br>
来源:https://www.cnblogs.com/software-Development/p/19083311
頁: [1]
查看完整版本: 国产化Excel处理组件Spire.XLS教程:C# 读取 CSV 文件,从基础读取到 DataTable 转换