C# 选择特定列的OpenXML

C# 选择特定列的OpenXML,c#,excel,openxml,spreadsheetml,C#,Excel,Openxml,Spreadsheetml,我试图选择一个特定的列,这样我就可以自动设置它的宽度,但几乎没有成功。我应该不能使用MSDN版本的GetRow从columns集合中选择列吗 return worksheet.GetFirstChild<SheetData>().Elements<Row>().Where(r => r.RowIndex == rowIndex).First(); return worksheet.GetFirstChild<SheetData>().Elements&

我试图选择一个特定的列,这样我就可以自动设置它的宽度,但几乎没有成功。我应该不能使用MSDN版本的GetRow从columns集合中选择列吗

return worksheet.GetFirstChild<SheetData>().Elements<Row>().Where(r => r.RowIndex == rowIndex).First();

return worksheet.GetFirstChild<SheetData>().Elements<Column>().Where(r => r.Min== columnNumber && r.Max == columnNumber).First();
返回工作表.GetFirstChild().Elements().Where(r=>r.RowIndex==RowIndex).First();
返回工作表.GetFirstChild().Elements()。其中(r=>r.Min==columnNumber&&r.Max==columnNumber)。First();

我是否采取了正确的方法?FWIW我知道如何从头开始创建列并设置宽度,但这不可行,因为我不知道在构造函数中创建列时,列中将包含哪些数据。

您可以将columns对象附加到工作表中。然后我做了一个设置宽度的方法

Worksheet ws = new Worksheet();
Columns columns = new Columns();

columns.Append(CreateColumnData(1, 1, 14.87));

ws.append(columns);


private static Column CreateColumnData(UInt32 StartColumnIndex, UInt32 EndColumnIndex, double ColumnWidth)
    {
        Column column;
        column = new Column();
        column.Min = StartColumnIndex;
        column.Max = EndColumnIndex;
        column.Width = ColumnWidth;
        column.CustomWidth = true;
        return column;
    }

他没有写那种方法。该方法来自一篇完整的文章,该文章能够根据单元格值的长度设置列的宽度:


希望这有帮助!;)

我也遇到了同样的问题,需要为不同的列设置宽度,但无法在web上找到解决方案。到目前为止提供的答案只是显示如何创建具有指定宽度的列,而不是如何动态更新指定列的宽度。可能我对.net的openxml库不太熟悉,但DocumentFormat.openxml没有像Office.Interop那样被很好地记录,也不直观。由于我的应用程序以azure服务运行,我没有机会使用Office.Interop。我的解决方案是使用closedxml库,它简化了与Office.Interop中类似的openxml文档的工作。你可以用谷歌搜索它。

这样,无论第1列中出现什么,宽度都将设置为14.87。你完全正确。。。我以前就可以这么做了。。。我需要做的是根据列的内部内容动态选择列的宽度:(这没有帮助。:@broguyman