适当的调整 Excel 中的“行”和“列”顺序可以增加可读性,例如通过将日期数据设置为首行或者首列,就可以根据特定的日期快速定位数据。在 MS Excel 中移动行或列是非常容易的,只需选中行或列后使用鼠标来拖动即可。在本文中,我们将演示如何使用 Spire.XLS for .NET 在 C# 中对Excel文档中的“行”或“列”重新排序。
安装 Spire.XLS for .NET
首先,您需要将 Spire.XLS for .NET 包含的 DLL 文件作为引用添加到您的 .NET 项目中。DLL 文件可以从此链接下载,也可以通过 NuGet 安装。
PM> Install-Package Spire.XLS
对 Excel 文档中“行”重新排序
使用 Spire.XLS for .NET 来重新排序 Excel 文档的行,首先需要把目标工作表复制到一个临时工作表中,然后按照指定顺序把临时工作表中的行复制到目标工作表的指定行,这样新排序的行覆盖了原始数据,就实现了对行重新排序的效果,具体步骤如下。
- 创建一个 Workbook 对象。
- 使用 Workbook.LoadFromFile() 方法加载 Excel 文件。
- 使用 Workbook.Worksheets[Index] 获取目标工作表。
- 创建一个 int 数组来存储新的行顺序。
- 创建一个临时工作表,并通过 Worksheet.CopyForm 将数据从目标表中复制到其中。
- 通过 Worksheet.Rows[Index].Copy() 方法将行从临时表复制到目标表,覆盖掉目标表的原数据,并以新的顺序存储它们;再通过 Worksheet.Rows[Index].RowHeight 来设置新的行高。
- 通过 Workbook.Worksheets.Remove 移除临时表。
- 使用 Workbook.SaveToFile() 方法将工作簿保存到结果 Excel 文件中。
- C#
using Spire.Xls;
using System.Linq;
namespace RearrangeRows
{
internal class Program
{
static void Main(string[] args)
{
// 创建一个Workbook对象
Workbook workbook = new Workbook();
// 从指定路径加载Excel文件
workbook.LoadFromFile(@"../../data1/摘要.xlsx");
// 获取第一个工作表
Worksheet worksheet = workbook.Worksheets[0];
// 定义新的行顺序数组
int[] newRowOrder = new int[] { 0,1,2,3,6,4,5};
// 添加一个新的工作表,命名为"temp"
Worksheet newSheet = workbook.Worksheets.Add("temp");
// 将原工作表的内容复制到新工作表中
newSheet.CopyFrom(worksheet);
// 遍历新的行顺序数组
for (int i = 0; i < newRowOrder.Count(); i++)
{
// 将原工作表的行复制到新工作表的新位置
newSheet.Rows[newRowOrder[i]].Copy(worksheet.Rows[i], true, true);
// 将原工作表的行高设置为新工作表对应行的行高
worksheet.Rows[i].RowHeight = newSheet.Rows[newRowOrder[i]].RowHeight;
}
// 删除临时工作表
workbook.Worksheets.Remove(newSheet);
// 将修改后的工作簿保存到指定路径,使用2016版本的Excel格式
workbook.SaveToFile(@"../../output/MoveRow.xlsx", FileFormat.Version2016);
}
}
}
对 Excel 文档中“列”重新排序
以下是使用 Spire.XLS for .Net 在 Excel 中重新排列“列”顺序的步骤:
- 创建一个 Workbook 对象。
- 使用 Workbook.LoadFromFile() 方法加载 Excel 文件。
- 使用 Workbook.Worksheets[Index] 获取目标工作表。
- 创建一个 int 数组来存储新的列顺序。
- 创建一个临时工作表,并通过 Worksheet.CopyForm 将数据从目标表中复制到其中。
- 通过 Worksheet.Columns[Index].Copy() 方法将列从临时表复制到目标表,覆盖掉目标表的原数据,并以新的顺序存储它们;再通过 Worksheet.Columns[Index].ColumnWidth 来设置新的列宽。
- 通过 Workbook.Worksheets.Remove 移除临时表。
- 使用 Workbook.SaveToFile() 方法将工作簿保存到结果 Excel 文件中。
- C#
using Spire.Xls;
using System.Linq;
namespace RearrangeColumns
{
internal class Program
{
static void Main(string[] args)
{
// 创建一个Workbook对象
Workbook workbook = new Workbook();
// 从指定路径加载Excel文件
workbook.LoadFromFile(@"../../data1/资产.xlsx");
// 获取第一个工作表
Worksheet worksheet = workbook.Worksheets[0];
// 定义新的列顺序
int[] newColumnOrder = new int[] { 0,1,3,2 };
// 添加一个新的工作表,命名为"temp"
Worksheet newSheet = workbook.Worksheets.Add("temp");
// 将原工作表的内容复制到新工作表中
newSheet.CopyFrom(worksheet);
// 遍历新的列顺序数组
for (int i = 0; i < newColumnOrder.Count(); i++)
{
// 将原工作表的列复制到新工作表的新位置
newSheet.Columns[newColumnOrder[i]].Copy(worksheet.Columns[i], true, true);
// 将原工作表的列宽设置为新工作表对应列的列宽
worksheet.Columns[i].ColumnWidth = newSheet.Columns[newColumnOrder[i]].ColumnWidth;
}
// 删除临时工作表
workbook.Worksheets.Remove(newSheet);
// 将修改后的工作簿保存到指定路径,使用2016版本的Excel格式
workbook.SaveToFile(@"../../output/MoveColumn.xlsx", FileFormat.Version2016);
}
}
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。