标签: closedxml

在C#中读取Excel数据和单元格格式

我正在寻找一个允许使用C#读取Excel文档的库,但我需要能够读取单元格格式以及电子表格中的数据。我发现这个有用的问题列出了许多用于读取Excel文档的替代方法,但是此处提供的许多解决方案仅允许读取电子表格的内容,而不允许读取单元格属性(例如,字体,背景色等)。但是,对于我的特定问题,我需要阅读一个包含很多单元格格式的文档,并且我需要能够读取此格式信息。

我需要阅读的Excel文档是xls文档,因此在此阶段不需要阅读xlsx。我正在寻找无需安装Excel就可以在服务器上使用的库,因此它必须是独立的解决方案,最好是开源的。

有没有人有从xls文档中读取单元格格式信息的经验,并且可以建议一个有助于完成此任务的库?

更新:

我正在使用ClosedXml,因为从我读到的内容来看,它似乎提供了我需要的功能。我正在使用以下示例代码:

http://closedxml.codeplex.com/wikipage?title=查找%20和%20extracting%20the%20data&referringTitle =文档

并能够毫无问题地读取Excel文档的内容。我仅使用此代码中的Categories示例,但已将两个categoryname单元格格式化为具有背景色。现在,我要使用ClosedXml进行的操作是确定:

  • 如果在特定单元格上定义了填充背景色

  • 如果已定义,则获取Fill的颜色(十六进制值即可)

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

// 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();
}
Run Code Online (Sandbox Code Playgroud)

但是代码

categoryName.Style.Fill.BackgroundColor.Color.ToHex()
Run Code Online (Sandbox Code Playgroud)

总是抛出期望“词典中不存在给定的键”。,即使对于确实定义了背景色的单元格也是如此。任何人都有任何想法如何与ClosedXml一起使用吗?

.net c# excel ms-office closedxml

1
推荐指数
1
解决办法
8832
查看次数

为什么关闭xml不支持.xls格式化excel文件?

在使用"关闭的xml"dll访问".xls"格式化excel文件期间发生异常

例外:Excel可能包含损坏的数据......

c# closedxml

1
推荐指数
1
解决办法
8704
查看次数

ClosedXML SecurityException:不允许请求的注册表访问

我使用ClosedXML导出Excel文件,我似乎无法导出Excel文件.每次我点击按钮导出Excel文件(XLSX)我都会收到一个错误.见下文...

    using (XLWorkbook wb = new XLWorkbook())
    {
        wb.Worksheets.Add(dsInput);
        Response.Clear();
        Response.Buffer = true;
        Response.Charset = "";
        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        Response.AddHeader("content-disposition", "attachment;filename=" + sFileName + ".xlsx");
        using (MemoryStream MyMemoryStream = new MemoryStream())
        {

            wb.SaveAs(MyMemoryStream, false);

            MyMemoryStream.WriteTo(Response.OutputStream);
            Response.Flush();
            Response.End();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我收到此错误:SecurityException:不允许请求的注册表访问.

Exception thrown: 'System.TypeInitializationException' in WindowsBase.dll
System.TypeInitializationException: The type initializer for 
'MS.Utility.EventTrace' threw an exception. ---> 
System.Security.SecurityException: Requested registry access is not allowed.
at System.ThrowHelper.ThrowSecurityException(ExceptionResource resource)
at Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable)
at Microsoft.Win32.RegistryKey.OpenSubKey(String name)
at Microsoft.Win32.Registry.GetValue(String keyName, String valueName, 
Object defaultValue) …
Run Code Online (Sandbox Code Playgroud)

c# asp.net closedxml

1
推荐指数
1
解决办法
2542
查看次数

使用ClosedXML将Excel工作表读入DataTable

我想将Excel工作表的内容读入C#DataTable。Excel工作表可能具有可变数量的列和行。Excel工作表中的第一行将始终包含列名,但其他行可能为空白。

我在此处看到的所有建议都假定存在Microsoft.ACE.OLEDB。我没有在系统上安装此库,因为当我尝试其中一些解决方案时遇到此错误。

Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
Run Code Online (Sandbox Code Playgroud)

考虑到我已安装Office 2016,这很奇怪。

因此,我希望通过Nuget使用ClosedXML库,但在他们的Wiki中看不到任何将Excel工作表读取为C#数据表的示例。

datatable excel closedxml

1
推荐指数
2
解决办法
9074
查看次数

设置表格样式。C# - 封闭的 xml

我正在寻找一种将表格样式应用于 excel 文件中插入数据的方法。我使用库关闭 xml 我该怎么做?

我想得到的样品表

在此处输入图片说明

        using (XLWorkbook wb = new XLWorkbook(excel))
        {   IXLWorksheet ws = wb.Worksheets.Last();
            string Qry;
            using (SqlCommand cmd = new SqlCommand(Qry, sqlConn))
            {
                sqlConn.Open();
                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    System.Data.DataTable schemaTable = dr.GetSchemaTable();
                    int i = 1;
                    foreach (DataRow rowt in schemaTable.Rows)
                    {
                    while (dr.Read())
                    {
                        row++;
                        for (int j = 0; j < dr.FieldCount; j++)
                        {
                            if (!dr.IsDBNull(j))
                            {
                                switch (dr.GetDataTypeName(j))
                                {
                                    case "Varchar2":
                                        string s = dr.GetString(j);
                                        if (s.Substring(0, 1) == "=")
                                            s …
Run Code Online (Sandbox Code Playgroud)

c# excel xlsx closedxml

1
推荐指数
1
解决办法
6538
查看次数

标签 统计

closedxml ×5

c# ×4

excel ×3

.net ×1

asp.net ×1

datatable ×1

ms-office ×1

xlsx ×1