我正在寻找一个允许使用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一起使用吗?
在使用"关闭的xml"dll访问".xls"格式化excel文件期间发生异常
例外:Excel可能包含损坏的数据......
我使用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) 我想将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#数据表的示例。
我正在寻找一种将表格样式应用于 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)