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 实用程序。
当我通过 a 添加工作表时DataTable,我希望日期格式遵循应用程序的区域设置/文化,但它似乎是从计算机中获取的。
string culture = "en-GB";
var newCulture = new CultureInfo(culture);
Thread.CurrentThread.CurrentCulture = newCulture;
Thread.CurrentThread.CurrentUICulture = newCulture; //probably unnecessary?
CultureInfo.DefaultThreadCurrentCulture = newCulture;
// ... select myDateColumn, myIntCol, myString
workBook.AddWorksheet(myDataTableThatContainsQueryResults, tabName);
Run Code Online (Sandbox Code Playgroud)
现在,您希望第一列 ( myDateColumn) 使用区域设置的短日期格式进行格式化en-GB,这应该是'31/10/2017',但它却出现了'10/31/2017'。
从 SQLDataAdapter 取回 DataTable 后,我检查了 DataTable 中的区域设置,它与嵌套日期格式一样正确。请注意,有多个查询,我不会提前知道日期在哪里。
感谢某人可以提供的任何方向!
我正在尝试根据单元格选择(值)为整行着色。我想仅更改工作表中使用的范围的行颜色,但不更改未使用的单元格的颜色。
这是我现在的代码:
class Program
{
static void Main(string[] args)
{
CreateWorkbook();
}
static void CreateWorkbook()
{
var workbook = new XLWorkbook();
var ws1 = workbook.AddWorksheet("Main");
var ws2 = workbook.AddWorksheet("ListOfOptions");
var listOfStrings = new List<String>();
listOfStrings.Add(" ");
listOfStrings.Add("Edit");
listOfStrings.Add("Delete");
ws2.Cell(2,2).InsertData(listOfStrings);
workbook.Worksheet(1).Column(3).SetDataValidation().List(ws2.Range("B2:B4"), true);
var list = new List<Person>();
list.Add(new Person() { Name = "John", Age = 30, Action = " " });
list.Add(new Person() { Name = "Mary", Age = 15, Action = " " });
list.Add(new Person() { Name = "Luis", …Run Code Online (Sandbox Code Playgroud) 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) 我希望有人可以帮助我使用ClosedXML,因为我是Excel新手出口的人,而且从我看到的ClosedXML,文档在某些方面相当有限.
目前我正在将数据放入Datatable,将行格式化为正确的类型并使用正确的布局导出.
当我尝试在每个单元格中导出包含重复公式的一行时,会发生此问题.
我试图将公式简单地添加为一个字符串,然后我可以在文件导出时突出显示并转换,这显然不是理想的.我发现了一个XML类,XLFormula它完全没有文档,但我认为我应该对此做些什么.
目前我已经(注释掉我正在使用的方式XLFormula,试图XLFormula将公式作为字符串传递并设置为每单位的总出价):
dt.Columns.Add("Qty", typeof(int));
dt.Columns.Add("Bid Per Unit GBP", typeof(double));
dt.Columns.Add("Total Bid GBP"); //typeof(XLFormula)
foreach (DataRow dr in dt.Rows)
{
//XLFormula totalBidFormula = new XLFormula();
dr["Qty"] = 1;
dr["Bid Per Unit GBP"] = 0.00;
dr["Total Bid GBP"] = "=[@Qty]*[@[Bid Per Unit GBP]]";
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.如果我想用ClosedXML做的事情是不可能的,请告诉我,如果你可以建议一个替代的XML导出器(即使它已付费),这将有所帮助!
根据文档,您可以使用以下语法向单元格添加条件格式:
.AddConditionalFormat().WhenEquals("=B1")
Run Code Online (Sandbox Code Playgroud)
所以我尝试了这个:
cell.AddConditionalFormat().WhenEquals("=F5=0")
.Fill.SetBackgroundColor(XLColor.FromHtml("#f00"));
Run Code Online (Sandbox Code Playgroud)
但是,每当我尝试这个时,将电子表格加载到Excel中,并查看单元格的条件格式,它似乎已将其更改为简单的"单元格值等于"类型,而不是公式类型.所以我看到了这个:
但我想看到的是:
我错过了什么!?
我正在使用 PowerShell 3 和 ClosedXML 将文件信息写入 Excel 工作表。在其中一个单元格中,我需要将背景颜色设置为浅蓝色(矢车菊蓝色或 RGB 中的 219、229、249)。我已经尝试了多种方法,但到目前为止都没有成功。根据 ClosedXML 站点,我应该能够引用 XLColor 对象。我还尝试了多种设置背景颜色的方法。
$cell.Style.Fill.BackgroundColor.Color(219, 229, 249)
Run Code Online (Sandbox Code Playgroud)
或 $cell.Style.Fill.SetBackgroundColor(6) 或 $cell.Style.Fill.SetBackgroundColor(XLColor.Blue)
任何建议将不胜感激。大多数示例是 C#,它们通常可以无缝转换,但这是我没有运气弄清楚的示例。
感谢里克·安德森
如何在Excel中创建图表,同时将数据从数据库导出到Excel工作表..!
我正在将数据从数据库导出到 Excel。我需要根据数据库中的数据在 Excel 工作表中创建图表。下面的代码创建了简单的 Excel 工作表,我需要在相同的代码中进行更改才能创建图表。请指导
public ActionResult ExportToExcel()
{
var workbook = new ClosedXML.Excel.XLWorkbook();
var worksheet = workbook.Worksheets.Add("SheetOne");
DocumentFormat.OpenXml.Drawing.PictureLocks piclocks = new DocumentFormat.OpenXml.Drawing.PictureLocks();
worksheet.Cell("A1").Value = "Test data!";
Response.ClearContent();
Response.Buffer = true;
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=\"SheetOne.xlsx\"");
System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
workbook.SaveAs(memoryStream);
memoryStream.WriteTo(Response.OutputStream);
memoryStream.Close();
Response.End();
return File(memoryStream, "application/ms-excel", "PPs_Workflow.xlsx");
} *
Run Code Online (Sandbox Code Playgroud)