gpt4 book ai didi

c# - 使用带有 C# 的 OpenOffice Uno CLI 创建电子表格

转载 作者:太空狗 更新时间:2023-10-30 00:57:36 24 4
gpt4 key购买 nike

到目前为止,我已经找到了几个讨论 ODS 文件创建的来源:How to create ODS documents in .NetHow to create .odt files with C#.NET?

最有趣的是an explanation for opening calc files .然而,这会全屏打开 OpenOffice,我正在寻找的是某种无需实际打开 OpenOffice 即可写入 Calc 文件 (.ods) 的方法。这样我就可以编写一个函数来打开一个保存文件对话框,获取文件名,然后创建并保存 .ods 文件。

是否有任何 C# 代码示例可用于执行此类操作?

最佳答案

所以我终于解决了这个问题,并希望让其他人免于再次经历这个问题。 HEADACE 对我来说的基本要点是:

  1. 使用正斜杠而不是反斜杠(例如 C:/ 而不是 C:\ )
  2. 使用的Filtername 应设置为用于保存文档的引擎。可能的值包括 writer8calc8MS Excel 97,因此对于电子表格,您显然需要使用 calc8<
  3. 如果您不希望 OpenOffice 在前台弹出并等待它填充您的数据,请使用 PropertyValue 并将 Hidden 设置为

编码愉快,不要忘记安装 OpenOffice SDK 以便能够添加 unoidl 引用:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using unoidl.com.sun.star.uno;
using unoidl.com.sun.star.lang;
using unoidl.com.sun.star.frame;
using unoidl.com.sun.star.beans;
using unoidl.com.sun.star.sheet;
using unoidl.com.sun.star.container;
using unoidl.com.sun.star.table;
using unoidl.com.sun.star.text;

namespace TimeScanner {
class ReportGenerator {
private const string fileName =
@"file:///C:/Documents and Settings/My Documents/Hours Report.ods";

//Concrete Methods
internal XComponent openCalcSheet() {
XComponentContext oStrap = uno.util.Bootstrap.bootstrap();
XMultiServiceFactory oServMan = (XMultiServiceFactory)oStrap.getServiceManager();
XComponentLoader desktop = (XComponentLoader)oServMan.createInstance("com.sun.star.frame.Desktop");
string url = @"private:factory/scalc";
PropertyValue[] loadProps = new PropertyValue[1];
loadProps[0] = new PropertyValue();
loadProps[0].Name = "Hidden";
loadProps[0].Value = new uno.Any(true);
//PropertyValue[] loadProps = new PropertyValue[0];
XComponent document = desktop.loadComponentFromURL(url, "_blank", 0, loadProps);
return document;
}

public void writeToSheet(XComponent document) {
XSpreadsheets oSheets = ((XSpreadsheetDocument)document).getSheets();
XIndexAccess oSheetsIA = (XIndexAccess) oSheets;
XSpreadsheet sheet = (XSpreadsheet) oSheetsIA.getByIndex(0).Value;
XCell cell = sheet.getCellByPosition( 0, 0 ); //A1
((XText)cell).setString("Cost");
cell = sheet.getCellByPosition( 1, 0 ); //B1
cell.setValue(200);
cell = sheet.getCellByPosition( 1, 2 ); //B3
cell.setFormula("=B1 * 1.175");
}

public void saveCalcSheet(XComponent oDoc) {
PropertyValue[] propVals = new PropertyValue[1];
propVals[0] = new PropertyValue();
propVals[0].Name = "FilterName";
propVals[0].Value = new uno.Any("calc8");
((XStorable)oDoc).storeToURL(fileName, propVals);
}
}
}

关于c# - 使用带有 C# 的 OpenOffice Uno CLI 创建电子表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4743738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com