C# 在ClosedXML中,如何按列对工作表排序?

C# 在ClosedXML中,如何按列对工作表排序?,c#,excel,closedxml,C#,Excel,Closedxml,在C#中,使用asp/MVC,应用程序根据填充到特定列的数据生成一个Excel.xlsx文件,效果非常好 但目标是提供使用相同列但按特定列排序的其他工作表,如“J”列 工作表ws包含由变量或公式填充的值,数据正确,但无法对列进行排序 ws.AutoFilter.Column("J"); //no, nothing changes ws.Column("J").Sort(); -> this shifts all the columns up but does not sort

在C#中,使用asp/MVC,应用程序根据填充到特定列的数据生成一个Excel.xlsx文件,效果非常好

但目标是提供使用相同列但按特定列排序的其他工作表,如“J”列

工作表ws包含由变量或公式填充的值,数据正确,但无法对列进行排序

  ws.AutoFilter.Column("J");   //no, nothing changes
  ws.Column("J").Sort(); -> this shifts all the columns up but does not sort
  ws.Column("J").Sort(XLSortOrder.Ascending);  ->same, doesnt sort only shifts
更新:ws.Sort(9);在排序中工作,但问题是第10列有一个公式,我需要对该列进行排序

   ws.Cell("J" + c).FormulaR1C1 = "=C$2-F" + c;

用这个?它不会排序。ws.Sort(10);当单元格包含最终值时有效,但当它得到公式时有效?是否有任何解决方法可以强制Excel页面在每个单元格中实现公式后进行排序?

您不是在对表格进行排序,而是对J列中的值进行排序

试试这个:

ws.Sort("Column10");

您没有对表进行排序,而是对J列中的值进行排序

试试这个:

ws.Sort("Column10");

必须将其写成:ws.Sort(10);因为ws.Sort(“Column10”);出现错误:必须输入有效值1-65536?但是,如果我在另一个专栏中使用它,它会工作!排序(11)按该列排序。只是对第10列不起作用,唯一的区别是第10列从公式中获取值。第10列中的每个单元格都有“=C$4-E6”(或E7、E8等)。当得到公式时,您可以按列进行排序吗?对公式进行排序没有任何意义,因为excel公式不会由ClosedXml执行。你能做的是。。。计算结果并将其写入一列,按该列排序,然后将其删除。但是,对于这种情况,您可以简单地按列5(
E
)desc排序。有些奇怪的是,现在所有工作表都在列A上排序,工作正常,ws2.sort(3);将按“C”列排序。不再是了,它们在“A”列排序。但是它起作用了。取出所有公式,在控制器中进行计算,只需输入变量。你知道为什么排序会起作用,以后就不起作用了吗?必须写为:ws.Sort(10);因为ws.Sort(“Column10”);出现错误:必须输入有效值1-65536?但是,如果我在另一个专栏中使用它,它会工作!排序(11)按该列排序。只是对第10列不起作用,唯一的区别是第10列从公式中获取值。第10列中的每个单元格都有“=C$4-E6”(或E7、E8等)。当得到公式时,您可以按列进行排序吗?对公式进行排序没有任何意义,因为excel公式不会由ClosedXml执行。你能做的是。。。计算结果并将其写入一列,按该列排序,然后将其删除。但是,对于这种情况,您可以简单地按列5(
E
)desc排序。有些奇怪的是,现在所有工作表都在列A上排序,工作正常,ws2.sort(3);将按“C”列排序。不再是了,它们在“A”列排序。但是它起作用了。取出所有公式,在控制器中进行计算,只需输入变量。你知道为什么这种方法会起作用,后来就不起作用了吗?