我正在尝试使用C#并将ClosedXML数据输入Excel工作表.我找到了我正在寻找的大部分内容,但是我有一些问题ClosedXML需要处理小数位数以及舍入数字.
我目前正在使用cell.Style.NumberFormat.NumberFormatId = 10;
单元格来显示一个带有2位小数的百分比,但是我想只显示1位小数,而wikiClosedXML只显示0或2位小数的百分比.
接下来,当我不使用ClosedXML并直接添加数据时,Excel将向上舍入小数位,但是当我ClosedXML用来输入数据时,单元格不会向上舍入,是否有办法强制ClosedXML为我舍入,或者我需要手动做到这一点?
在我的工作簿中,我有4个具有不同选项卡名称的工作表.如果它们的名称如下:第一,第二,第三,第四.
我无法在网上找到如何迭代每个工作表的说法for for循环.在迭代时,我还想捕获Worksheet选项卡上的文本(First,Second等).
我正在阅读excel表中的日期.我喜欢做的是强制日期为mm/dd/yyyy有没有办法在Closed XML中执行此操作.
我看了一眼https://closedxml.codeplex.com/documentation但无法找到如何强制或更新日期到某种格式.
使用 ClosedXML,我试图将数据添加到现有表格中的现有 Excel 工作表中。最简单的方法是将表格添加到 Excel 工作表中,下面是如何执行此操作的快速示例。我不明白的是,如果你已经有一个空的表,你怎么能添加到现有的表中?
// Add a DataTable as a worksheet
wb.Worksheets.Add(dataTable);
Run Code Online (Sandbox Code Playgroud) 我正在从事C#/ ASP.NET网络工作,并希望进行Excel导出.首先我找到了OpenXML,做了一些初步的步骤,但它真的很难用.现在,我正在使用ClosedXML,这是一个相当宽慰 - 到目前为止.
我想出了一个问题,就是在表格单元格上进行渐变填充...没有像普通填充那样的问题
worksheet.Cell(1,1).Style.Fill.SetBackgroundColor(XLColor.Red);
Run Code Online (Sandbox Code Playgroud)
或者像图案一样
worksheet.Cell(1,1).Style.Fill.PatternType = XLFillPatternValues.LightHorizontal;
worksheet.Cell(1,1).Style.Fill.PatternColor = XLColor.Green;
worksheet.Cell(1,1).Style.Fill.PatternBackgroundColor = XLColor.White;
Run Code Online (Sandbox Code Playgroud)
但是如何做GradientFill呢?据我所知,ClosedXML是基于OpenXML SDK构建的,所以应该可以做一个GradientFill - 就像(我还没测试)
GradientFill gFillEx = new GradientFill();
GradientStop gStop1st = new GradientStop();
gStop1st.Position = 0;
gStop1st.Color = new Color { Rgb = HexBinaryValue.FromString("00FF00") };
GradientStop gStop2nd = new GradientStop();
gStop2nd.Position = 1;
gStop2nd.Color = new Color { Rgb = HexBinaryValue.FromString("FFFFFF") };
gFillEx.InsertAt<GradientStop>(gStop1st, 0);
gFillEx.InsertAt<GradientStop>(gStop2nd, 1);
Run Code Online (Sandbox Code Playgroud)
但是如何进行 - 如何将此gFillEx设置为单元格的填充样式?我也不介意在这里直接使用styles.xml文件中的xml - 如果我只知道放在哪里.
任何提示或有用的想法?谢谢.
我在我的项目中实现了Excel模板下载。我使用ClosedXML。
我有两张Excel表
Sheet1:在此工作表中,我有一个名为“类型”的列 ,我可以在其中创建下拉列表,它是第三列。
Sheet2:在这张表中,我有一个名为“类型”的列 ,其范围地址为:B2:B4,它是第二列。
类型值为:
Employee
Student
Teacher
Run Code Online (Sandbox Code Playgroud)
现在,我想创建一个下拉列表。
我在ClosedXML中创建了一个下拉列表,代码是:
//Getting the range of sheet 2
var range = workbook.Worksheet(2).Range(workbook.Worksheet(2).Cell(2,2).Address,workbook.Worksheet(2).Cell(4,2).Address);
//Applying sheet 2's range with sheet 1
workbook.Worksheet(1).Column(3).SetDataValidation().List(range:range);
wb.Worksheet(1).Column(3).SetDataValidation().IgnoreBlanks = true;
wb.Worksheet(1).Column(3).SetDataValidation().InCellDropdown = true;
Run Code Online (Sandbox Code Playgroud)
我在单元格的右端看到了下拉符号,但没有得到其中的值。
Excel 工作表包含 60K 条记录。需要读取并存入DataTable。目前正在逐行阅读。有没有其他更好的方法使用 ClosedXml。
DataTable dt = new DataTable();
var wb = new XLWorkbook(fileName, XLEventTracking.Disabled);
using (wb)
{
var ws = wb.Worksheet(1);
using (ws)
{
var headerRow = ws.Row(3);
int lastColumn = 32;
foreach (var col in headerRow.Cells(true))
{
dt.Columns.Add(col.Value.ToString());
}
foreach (var row in ws.Rows().Skip(3))
{
var dr = dt.NewRow();
for (int index = 0; index < lastColumn; index++)
{
dr[index] = row.Cell(index + 1).Value;
}
dt.Rows.Add(dr);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有多个包含数据的数据表,我想将它们添加到带有空格的单张纸中。我正在使用 ClosedXML 开发导出 excel 实用程序。
ClosedXml 不允许将最小日期时间插入单元格。我的数据表包含 ClosedXml 不喜欢的最小日期时间值。
using (var workbook = new XLWorkbook())
{
var dataTable = GetDataTable();
workbook.Worksheets.Add(dataTable, "myWorksheet"); // Exception thrown
workbook.SaveAs(filePath);
}
Run Code Online (Sandbox Code Playgroud)
添加工作表时抛出异常: “无法将单元格值设置为 01/01/0001 00:00:00”
如何允许 ClosedXml 插入此值而不引发异常?例如,它可以写入空值而不是抛出异常。是否可以在不修改数据表来清理这些最小日期时间值的情况下解决这个问题?
正如标题所说。网上有很多用于将文件上传到后端的示例,但我在验证客户端/离线后仅上传数据(无文件)。理论上,任何在 .Net5 上运行的东西都应该能够在 WASM 中以接近的性能运行。我正在尝试将这些繁重的操作卸载到客户的机器上。
我在 ClosedXML 方面取得了一些成功,但是当文件有几千行时,它会变得非常慢。在 Blazor 服务器端使用 ClosedXML 轻松加载 100,000 行。
笔记:
页:
@page "/upload"
@inject HttpClient Http
<h1>Upload Data</h1>
<p>This component demonstrates uploading data from Excel.</p>
<InputFile id="fileInput" OnChange="UploadFiles" hidden single />
<MudButton HtmlTag="label"
Variant="Variant.Filled"
Color="Color.Primary"
StartIcon="@Icons.Filled.CloudUpload"
for="fileInput">
Upload Files
</MudButton>
@if (dataTable == null)
{
<p><em>Please upload Excel File</em></p>
}
else
{
<MudTable Items="@dataTable.AsEnumerable().Take(500)" Hover="true" Breakpoint="Breakpoint.Sm" T="DataRow" RowsPerPage="100">
<HeaderContent>
@foreach …Run Code Online (Sandbox Code Playgroud)