我正在使用 ClosedXML 动态创建一个包含多个工作表的 Excel 工作簿。完成生成内容后,我正在努力将选定的工作表更改回工作簿中的第一张工作表,并且在文档中找不到有关如何更改显示的工作表的任何内容。我试过了:
wb.Worksheet(1).Select();
Run Code Online (Sandbox Code Playgroud)
这将选择工作表中的所有单元格,但不会将视图更改回来。
wb.Worksheet(1).Cells(1,1).Value = wb.Worksheet(1).Cells(1,1).Value
Run Code Online (Sandbox Code Playgroud)
似乎设置了值,但同样不会改变视图。
我曾尝试隐藏其他工作表,希望它能自动选择可见工作表,但这似乎不起作用。有什么建议?
信息:以下代码在 foreach 循环中
作品:
indexSheet.Cell("G" + cellIndex).FormulaA1 = "=SUM(A1:A10)";
Run Code Online (Sandbox Code Playgroud)
只有在我直接在 excel 中输入时才有效:
indexSheet.Cell("G" + cellIndex).FormulaA1 = "=FIND(\"erw\";H5)"; // with Property
indexSheet.Cell("G" + cellIndex).SetFormulaA1("=FIND(\"erw\";H5)"); //with Function
indexSheet.Cell("G" + cellIndex).FormulaA1 = $"COUNTIF(H{cellIndex};\"*\"&$C$2&\"*\")*(MAX($G$4:G{cellIndex - 1})+1)";
indexSheet.Cell("B" + cellIndex).FormulaA1 = $"=IF(ROW()-{cellIndex}>MAX(G:G);\"\";HYPERLINK(CONCATENATE(\"#\";(INDEX(H:H;MATCH(ROW()-4;G:G;0)));\"!B{cellIndex}\");(INDEX(H:H;MATCH(ROW()-4;G:G;0)))))";
Run Code Online (Sandbox Code Playgroud)
我已经检查/尝试过:
SUM()或FIND()- >(-sum作品,找不工作)Excel中显示我: 图片1
这是: 图片2
图 2 中的 Linked XML-logfile 包含有关已删除部分的信息
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<logFileName>error035720_03.xml</logFileName><summary>Errors were detected in file 'C:\Users\XXX\Documents\Output\CodeBook.xlsx'</summary> …Run Code Online (Sandbox Code Playgroud) 在我的ASP.NET MVC项目中,我使用ClosedXML生成了一个excel文件.
它在非ajax调用中运行良好.这是我的控制器动作方法
// Prepare the response
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=\"" + reportHeader + ".xlsx\"");
// Flush the workbook to the Response.OutputStream
using (MemoryStream memoryStream = new MemoryStream())
{
MyWorkBook.SaveAs(memoryStream);
memoryStream.WriteTo(Response.OutputStream);
memoryStream.Close();
}
Response.End();
Run Code Online (Sandbox Code Playgroud)
现在我试图通过ajax请求来做到这一点.但该文件不是从mvc控制器发送的.
$.ajax({
url: url,
type: "POST",
data: fd,
processData: false,
contentType: false,
beforeSend: function () {
},
success: function (response) {
},
error: function (request, status, error) {
},
complete: function () {
}
});
Run Code Online (Sandbox Code Playgroud)
我怎么能完成它?先感谢您.
当我打开我正在获取的文件时,无法使用ClosedXML输出一个好的文件
我们发现'filename.xlsx'中的某些内容存在问题.您是否希望我们尽可能多地恢复?如果您信任此工作簿的来源,请单击"是".
using (var workbook = new XLWorkbook())
{
var worksheet = workbook.AddWorksheet("name");
worksheet.Row(1).Cell(i + 1).SetValue("test");
worksheet.Row(k + 2).Cell(column.Order + 1).SetValue("test value");
using (var memoryStream = new MemoryStream())
{
workbook.SaveAs(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin);
return memoryStream.GetBuffer();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用closedXML生成一个XML文件(阿拉伯语),并且我需要此文件具有从右到左的布局,如何才能在closedXML中做到这一点。
XLWorkbook wb = new XLWorkbook();
var ws = wb.Worksheets.add("Sheet1");
ws.Cell(1,1).Value = "?????";
ws.Style.Alignment.ReadingOrder = XLAlignmentReadingOrderValues.RightToLeft;
Run Code Online (Sandbox Code Playgroud) 如何使用ClosedXML在同一Excel单元格中使用不同颜色的文本?
worksheet.Cell(1,1).Value.Character[StartIndex, NoOfChar].Font.Color....??
ClosedXML没有上述内容,请帮助我在同一单元格中使用两种不同的字体颜色。
是否可以在 ClosedXML 中创建和存储预定义样式,以便稍后将其应用于某个范围?就像 Excel 可以。例如通过静态类:
public static class ReportStyle
{
public static XLStyle Default {
get {
XLStyle style = new XLStyle(); //or something like that, I want a different XLStyle object
style.Font. //etc, all the changes
return style;
}
}
}
Run Code Online (Sandbox Code Playgroud)
后来我想做类似的事情:
range.Style = ReportStyle.Default;
Run Code Online (Sandbox Code Playgroud)
我想预先定义其中的一些,因为每个都可以在文档的不同部分多次使用,例如在不同的工作表中。现在我创建了一个粗略的解决方法,即隐藏在委托下的方法,因此我可以将它们存储在我的模块中(太多无法解释 - 我只需要将样式存储为对象 - 因为我需要复制它的能力):
public delegate bool StyleDelegate(IXLRange range);
Run Code Online (Sandbox Code Playgroud)
然后我可以将我的样式更改方法存储在里面,并在稍后的样式应用阶段调用它:
public static void SetStyleDefault(IXLRange range){
//do some style changes for this range
}
public StyleDelegate Style { get; set; } = …Run Code Online (Sandbox Code Playgroud) 我希望能够使用ClosedXML查找某个范围内是否存在特定字符串,但是,我在文档中找不到任何find命令.目前我循环遍历1000行以查找字符串是否存在.有没有更有效的方法来做到这一点?
这是我的代码示例:
for (int j = 3; j <= PipeSheet.LastRowUsed().RowNumber(); j ++)
{
if ((PipeSheet.Cell(j, ProdCodeColumnInPipe).Value.ToString().Trim() == SheetToEdit.Cell(i, ProdCodeColumnInMain).Value.ToString().Trim() & PipeSheet.Cell(j, 3).Value.ToString().Trim() == SheetToEdit.Cell(i, RegionCodeInMain).Value.ToString().Trim()))
{
SheetToEdit.Cell(i, ColumnToEdit).Value = "+";
if ((new[] { "Open", "Under Review" }).Contains(PipeSheet.Cell(j, 5).Value.ToString().Trim()) & (new[] { "Forecast"}).Contains(PipeSheet.Cell(j, 4).Value.ToString().Trim()))
{
if (FirstColumnHighlight > 1 & LastColumnHighlight > 1)
{
for (int k = FirstColumnHighlight; k <= LastColumnHighlight; k++)
{
SheetToEdit.Cell(i, k).Style.Fill.BackgroundColor = XLColor.FromArgb(255, 255, 0);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我刚开始使用ClosedXML。当我使用下面的代码创建一个新的工作簿时,它会自动将“蓝色,表样式浅色9”应用于每个工作表。我不希望工作表上有任何样式。如何不指定样式?
XLWorkbook wb = new XLWorkbook();
wb.Worksheets.Add(dt, "sheet1");
Run Code Online (Sandbox Code Playgroud)
我基本上只是用SQL数据表填充工作表。
我有ClosedXML类似的问题,像这样的一个,但有点diferent。SetDataType方法不起作用。例如,我的值
string dps = "3.12.02"
不是日期或数字,它是有效的文本。
当我这样做时:
ws.Cell(1, 1).Value = dps;
ws.Cell(1, 1).SetDataType(XLCellValues.Text);
并保存该文件,然后在Excel中打开它,它仍然将其转换为一些红宝石,就像37593
我尝试在设置该值之前和之后放置它一样,没有任何变化。
有人可以帮我吗?