- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Java 与 LibreOffice API 进行交互。目前,我正在努力创建一个辅助类,用于执行检索对象、插入文本等操作。但是,我在对电子表格文档应用验证时遇到问题。我的功能如下:
public static void applyValidation(int x1, int y1, int x2, int y2, XSpreadsheet sheet, ValidationType type) throws UnknownPropertyException, WrappedTargetException, IndexOutOfBoundsException, IllegalArgumentException, PropertyVetoException {
XCellRange range = sheet.getCellRangeByPosition(x1, y1, x2, y2);
XPropertySet propSet = UnoRuntime.queryInterface(XPropertySet.class, range);
XPropertySet validProp =(XPropertySet) propSet.getPropertyValue("Validation");
validProp.setPropertyValue("ShowErrorMessage", new Boolean(true));
validProp.setPropertyValue("ErrorMessage", "Please enter a valid time");
validProp.setPropertyValue("ErrorAlertStyle", ValidationAlertStyle.INFO);
propSet.setPropertyValue("Validation", validProp);
}
它是根据 OpenOffice Developer's Guide 中提供的示例建模的。
我正在尝试从测试类调用该方法:
@Test
public void test() {
try {
XComponentLoader loader = LibreBootstrapper.getLoader();
assertTrue( (loader instanceof XComponentLoader));
XSpreadsheetDocument doc = SpreadsheetHelper.getSpreadsheetDoc(loader);
assertTrue( (doc instanceof XSpreadsheetDocument));
XSpreadsheet sheet = SpreadsheetHelper.getSheetByIndex(SpreadsheetHelper.getSheets(doc), 0);
SpreadsheetHelper.insertIntoCell(0, 0, sheet, 400);
SpreadsheetHelper.insertIntoCell(1, 0, sheet, 300);
SpreadsheetHelper.insertFormula(2, 0, sheet, "=SUM(A1:B1)");
SpreadsheetHelper.insertIntoCell(2, 2, sheet, "Hello World!");
SpreadsheetHelper.setProperty(0, 0, 8, 10, sheet, "CellStyle", "Heading 1");
int formatCode = SpreadsheetHelper.getFormatCode(doc, NumberFormat.TIME);
SpreadsheetHelper.setProperty(0, 0, 8, 10, sheet, "NumberFormat", formatCode);
SpreadsheetHelper.applyValidation(0, 0, 8, 10, sheet, ValidationType.TIME);
} catch (Exception e) {
e.printStackTrace();
}
}
但是,我收到以下错误:
java.lang.ClassCastException: com.sun.star.uno.Any cannot be cast to com.sun.star.beans.XPropertySet
它有以下堆栈
at edu.cmu.office.SpreadsheetHelper.applyValidation(SpreadsheetHelper.java:125)
at HelperTests.test(HelperTests.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:539)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:761)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:461)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:207)
我什至尝试基本上复制并粘贴示例中的代码(链接到上面),但仍然收到相同的错误。
我对 LibreOffice API 不太熟悉;任何帮助将不胜感激。
编辑:
实际抛出错误的行如下:
XPropertySet validProp =(XPropertySet) propSet.getPropertyValue("Validation");
即使直接从示例中复制并粘贴,我也会收到相同的错误:
public static void applyValidation(int x1, int y1, int x2, int y2, XSpreadsheet sheet, ValidationType type) throws UnknownPropertyException, WrappedTargetException, IndexOutOfBoundsException, IllegalArgumentException, PropertyVetoException {
// XCellRange range = sheet.getCellRangeByPosition(x1, y1, x2, y2);
// XPropertySet propSet = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, range);
//
// XPropertySet validProp =(XPropertySet) propSet.getPropertyValue("Validation");
// validProp.setPropertyValue("ShowErrorMessage", new Boolean(true));
// validProp.setPropertyValue("ErrorMessage", "Please enter a valid time");
// validProp.setPropertyValue("ErrorAlertStyle", ValidationAlertStyle.INFO);
//
// propSet.setPropertyValue("Validation", validProp);
//
// --- Data validation ---
com.sun.star.table.XCellRange xCellRange = sheet.getCellRangeByName("A7:C7");
com.sun.star.beans.XPropertySet xCellPropSet = (com.sun.star.beans.XPropertySet)
UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, xCellRange);
// validation properties
com.sun.star.beans.XPropertySet xValidPropSet = (com.sun.star.beans.XPropertySet)
xCellPropSet.getPropertyValue("Validation");
xValidPropSet.setPropertyValue("Type", com.sun.star.sheet.ValidationType.DECIMAL);
xValidPropSet.setPropertyValue("ShowErrorMessage", new Boolean(true));
xValidPropSet.setPropertyValue("ErrorMessage", "This is an invalid value!");
xValidPropSet.setPropertyValue("ErrorAlertStyle", com.sun.star.sheet.ValidationAlertStyle.STOP);
// condition
com.sun.star.sheet.XSheetCondition xCondition = (com.sun.star.sheet.XSheetCondition)
UnoRuntime.queryInterface(com.sun.star.sheet.XSheetCondition.class, xValidPropSet);
xCondition.setOperator(com.sun.star.sheet.ConditionOperator.BETWEEN);
xCondition.setFormula1("0.0");
xCondition.setFormula2("5.0");
// apply on cell range
xCellPropSet.setPropertyValue("Validation", xValidPropSet);
}
在下面一行:
com.sun.star.beans.XPropertySet xValidPropSet = (com.sun.star.beans.XPropertySet)
xCellPropSet.getPropertyValue("Validation");
最佳答案
您似乎忘记正确转换它。代码应该类似于示例:
XPropertySet xCellPropSet = (XPropertySet)
UnoRuntime.queryInterface(XPropertySet.class, xCellRange);
...而不是这个:
XPropertySet propSet = UnoRuntime.queryInterface(XPropertySet.class, range);
编辑:
显然,这个例子是不正确的。这是工作代码:
XPropertySet validProp = (XPropertySet)
UnoRuntime.queryInterface(XPropertySet.class,
propSet.getPropertyValue("Validation"));
使用 Java 和 UNO 时,这些类型的问题很烦人。我更喜欢Python和UNO,原因之一是因为不需要queryInterface
。
关于java - LibreOffice Java - 无法将 uno.Any 转换为 XPropertySet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47116269/
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以使溢出。 4年前关闭。 o
我有一个包含多个列的表格。 我只想要 target 值与 alg 值不同的行。在这种情况下,target 是 1 并且 alg 是 0。因此,第 2、4 和 5 行应该保留,而第 3 行应该删除。如何
我有一个百分比表: A | B | C ------------------- 1| 12% | 22% | 42% ------------------- 2| 52% | 2%
我有一个 Libreoffice Calc 工作簿,其中有 60 多张纸,其中许多都有复制到它们的大量图像。我想用 Calc Basic 宏删除所有图像。我尝试了以下失败并出现基本运行时错误,提示 P
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 12 个月前关闭。 Improve
我有一个格式为 HH:MM 的时间值求和列。总和的格式为 [HH]:MM,可防止 HH > 23 时翻转。我希望将此值转换为十进制数表示形式。例如: A B 1 12
有没有办法将模板应用于现有文档? 它似乎只有在我创建一个全新的文档时才有效,而且我不想复制粘贴所有内容。 最佳答案 我正在寻找相同的解决方案。我发现的唯一一件事是一个 LibreOffice 扩展来做
LibreOffice Calc 中的什么公式将计算不同 Week_Number 出现的次数?答案应该是2。 最佳答案 这个问题之前已经被问过很多次了。一种方法是在 B6 中输入以下公式然后按 Ctr
假设我在 LibreOffice calc 中有以下电子表格: | A | B | C | D | ------------------- |1| 1 | 2 | | 2 | |2| 2 |
LibreOffice Calc 中是否有接受 的函数整数 x 和 整数 y 并以该位置吐出单元格的内容? 有一个功能ADDRESS吐出给定 [x;y] 的地址。问题是我不知道如何取消引用它。 最佳答
我希望能够在 LibreOffice Calc 中选择两个单元格,然后按某种魔术键,结果交换两个单元格的内容。 我怎么做? 我为 Excel 找到了这个解决方案,但它在 LibreOffice 中不起
我正在寻找一种使用 LibreOffice 的 Calc 从网站获取一些数据的方法。 我之前使用带有 IMPORTXML 函数的 Google 表格,但因为它非常不可靠,所以我想改用 Calc。 我的
我想从 LibreOffice Calc 中多次出现的字符中获取最后一次出现。 例如我有一个字符串 abc1ba2ac2adeaa43add .现在,如果我正在搜索 a它应该返回 18。 最佳答案 使
我想在 LibreOffice Calc(v5.4.4.2 但可以升级)中实现一些条件格式,以突出显示其值通过公式计算而不是直接输入的单元格。 例如,一个单元格包含 =A3 将突出显示,而 Hello
我想为 Libreoffice Writer 创建一个模板,其中包含应显示在所有页面上的信息的右列。 事实上,我想要一种右侧的页眉。 有什么办法可以解决我的问题吗? 最佳答案 您可以使用 anchor
我有一个 LibreOffice 3 电子表格(在 Ubuntu 11.04 上),其中有一列包含数百个超链接,这些超链接仅显示为“链接”。 我需要将这些转换为纯文本,或者更糟糕的是显示超链接而不是文
看起来您只能从“数据”->“排序”中选择 3 个条件。有没有办法(可能是程序化的)使用额外的标准? 最佳答案 不,不调整代码是不可能做到的。从理论上讲,调整它并消除此限制应该很容易。对于 3-5 版本
我需要提取“日期字符串”作为表示日期/时间数据的单独列。 | A | B | C -+-----------------
我在 Windows 计算机上安装了 LibreOffice。 LibreOffice 附带了捆绑的 python.exe(版本 3.3),允许您用 Python 编写 LibreOffice 宏。这
我在 .docx 文件中的方程是 当我将 word 文件保存到 .odt 时,这个等式变成了 如何避免这个反问号? 最佳答案 解决方案:编辑等式并在等号后键入双引号 ("")。 关于libreoffi
我是一名优秀的程序员,十分优秀!