ClosedXml 能否使用隐式交集运算符编写未被 Excel 标记的范围公式?
Can ClosedXml write range formulas that don't get marked by Excel with the Implicit Intersection Operator?
我们正在尝试使用一个公式编写一个 .xlsx 文件,该公式将 return 使用 ClosedXml 的 double[]。 Excel 的新版本在公式中添加了隐式交集运算符 ('@'),并且不允许它溢出到相邻的单元格。
有没有办法让它不发生。 Microsoft 谈论设置 Range.Formula2 (https://docs.microsoft.com/en-us/office/vba/api/excel.range.formula2),但我不确定是否可以通过 ClosedXml 获得。
我不想尝试用 OpenXml 实现写入文件,因为那看起来很毛茸茸。
有办法吗?
样本:
using ClosedXML.Excel;
namespace ClosedXmlWriter
{
class Program
{
static void Main(string[] args)
{
XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);
IXLWorksheet sheet = workbook.Worksheets.Add("home");
IXLCell cell = sheet.Cell(1, 1);
cell.FormulaA1 = "=MyTestFunc()";
workbook.SaveAs(@"d:\test.xlsx");
}
}
}
使用引用 ExcelDNA 的项目创建自定义 UDF:
using ExcelDna.Integration;
namespace TestPlugin
{
public static class FunctionDefinitions
{
[ExcelFunction(Name = "MyTestFunc", Description = "Function description")]
public static object MyTestFunc()
{
return new double[] { 1.0, 2.0, 3.0 };
}
}
}
运行 Excel 针对测试插件生成的 .xll 文件和 ClosedXml 生成的文件。
您必须将公式设置在输出大小的范围内,并将其放在{}
:
之间
using (var workbook = new XLWorkbook())
{
var worksheet = workbook.Worksheets.Add("Sheet1");
worksheet.Range("A3:C3").FormulaA1="{={1.0,2.0,3.0}}";
workbook.SaveAs(myFile);
}
对于您的公式,它将是
using (var workbook = new XLWorkbook())
{
var worksheet = workbook.Worksheets.Add("Sample Sheet");
worksheet.Range("A1:C1").FormulaA1="{=MyTestFunc()}";
workbook.SaveAs(myFile);
}
产生:
我们正在尝试使用一个公式编写一个 .xlsx 文件,该公式将 return 使用 ClosedXml 的 double[]。 Excel 的新版本在公式中添加了隐式交集运算符 ('@'),并且不允许它溢出到相邻的单元格。
有没有办法让它不发生。 Microsoft 谈论设置 Range.Formula2 (https://docs.microsoft.com/en-us/office/vba/api/excel.range.formula2),但我不确定是否可以通过 ClosedXml 获得。
我不想尝试用 OpenXml 实现写入文件,因为那看起来很毛茸茸。
有办法吗?
样本:
using ClosedXML.Excel;
namespace ClosedXmlWriter
{
class Program
{
static void Main(string[] args)
{
XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);
IXLWorksheet sheet = workbook.Worksheets.Add("home");
IXLCell cell = sheet.Cell(1, 1);
cell.FormulaA1 = "=MyTestFunc()";
workbook.SaveAs(@"d:\test.xlsx");
}
}
}
使用引用 ExcelDNA 的项目创建自定义 UDF:
using ExcelDna.Integration;
namespace TestPlugin
{
public static class FunctionDefinitions
{
[ExcelFunction(Name = "MyTestFunc", Description = "Function description")]
public static object MyTestFunc()
{
return new double[] { 1.0, 2.0, 3.0 };
}
}
}
运行 Excel 针对测试插件生成的 .xll 文件和 ClosedXml 生成的文件。
您必须将公式设置在输出大小的范围内,并将其放在{}
:
using (var workbook = new XLWorkbook())
{
var worksheet = workbook.Worksheets.Add("Sheet1");
worksheet.Range("A3:C3").FormulaA1="{={1.0,2.0,3.0}}";
workbook.SaveAs(myFile);
}
对于您的公式,它将是
using (var workbook = new XLWorkbook())
{
var worksheet = workbook.Worksheets.Add("Sample Sheet");
worksheet.Range("A1:C1").FormulaA1="{=MyTestFunc()}";
workbook.SaveAs(myFile);
}
产生: