读取Excel中的数据和单元格格式的C#(Reading Excel data and cell f

2019-09-18 11:56发布

我要寻找一个图书馆,让我看在C#中的Excel文档,但我需要能够读取单元格格式 ,以及在电子表格中的数据。 我发现这个有用的问题 ,列出了很多不同的替代品,用于读取Excel文件,但读了很多这里提供只允许电子表格的内容的解决方案,而不是单元格属性(如字体,背景颜色等)。 对于我的具体问题,不过,我需要读取包含大量的单元格的格式的文件,我需要能够读取该格式信息。

那我需要在读取Excel文件是一个XLS文件,所以我不需要在这个阶段阅读XLSX。 我在寻找一个可以在服务器上,而不安装Excel使用的库,所以它必须是一个独立的解决方案,最好的开源。

有没有人有从XLS文档读取单元格格式的信息体验,并可以建议一个库,这将有助于完成这个任务?

更新:

我期待在使用ClosedXml因为从我读到它,它似乎提供了我需要的功能。 我从这个示例代码的工作:

http://closedxml.codeplex.com/wikipage?title=Finding%20and%20extracting%20the%20data&referringTitle=Documentation

并且已经能够读取Excel文件的内容没有问题。 我从这个代码中使用仅仅类别的例子,但已格式化的两个类别名称细胞有背景颜色。 现在,我试图用ClosedXml做的是确定:

  • 如果填充背景色已经在特定的细胞定义

  • 如果它被定义,检索填充 (十六进制值会做)的颜色

这里是我曾尝试使用一些代码:

// Get all categories
while (!categoryRow.Cell(coCategoryId).IsEmpty())
{
    IXLCell categoryName = categoryRow.Cell(coCategoryName);
    try
    {
        categories.Add(categoryName.GetString() + " " + categoryName.Style.Fill.BackgroundColor.Color.ToHex());
    }
    catch
    {
        categories.Add(categoryName.GetString() + " None");
    }
    categoryRow = categoryRow.RowBelow();
}

但代码

categoryName.Style.Fill.BackgroundColor.Color.ToHex()

总是抛出厚望“给定的关键是不存在的字典。” ,即使对于做细胞有背景颜色定义。 任何人有任何想法如何得到这个工作与ClosedXml?

Answer 1:

OpenXml及其包装- ClosedXml为您提供了很多有用的功能。



Answer 2:

如果没有需要自由我强烈推荐的Aspose.Cells



Answer 3:

我躲着部分您的要求,但你可以转换xls-> XLSX服务器上,然后搜索(的XPath)的XML。 也许xls-> OpenOffice的钙能做到大致相同。



Answer 4:

你可以使用的Microsoft.Office.Interop.Excel

var workbookPath = "";
var worksheetName = "";

var applicationClass = new Application();
var workbook = applicationClass.Workbooks.Open(workbookPath, Type.Missing, Type.Missing,     Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing , Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

var worksheet = workbook.GetWorksheet(worksheetName);
var usedRange = worksheet.UsedRange;
var columnRangeIndexColumn= 1;


            for (int i = beginIndexRow; i <= usedRange.Rows.Count; i++)
            {
                var columnRange = usedRange.Cells[i, columnRangeIndexColumn];
                var value= columnRange.Value2;
             }




use this extension

public static Worksheet GetWorksheet(this Workbook value, string name)
        {
            foreach (Worksheet worksheet in value.Worksheets)
            {
                if (worksheet.Name == name)
                {
                    return worksheet;
                }
            }
            return value.ActiveSheet;
        }


文章来源: Reading Excel data and cell formatting in C#