OpenOffice表格格式化java
问题描述:
我在java中创建了一个使用open office api的表格。现在我想格式化表格单元格内容,如给它背景颜色,更改字体,大小和对齐方式。 我的代码是OpenOffice表格格式化java
XMultiServiceFactory xMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, xdocument);
// Creating a table with 13 rows and 2 columns
XTextTable xTextTable = (XTextTable) UnoRuntime.queryInterface(XTextTable.class, xMSF.createInstance("com.sun.star.text.TextTable"));
xTextTable.initialize(2, 2); // rows, cols
// insert table in the xText
xText.insertTextContent(xText.getEnd(), xTextTable, false);
XPropertySet xPS1 = (XPropertySet) UnoRuntime.queryInterface(
XPropertySet.class, xTextTable);
// Get table Width and TableColumnRelativeSum properties values
int iWidth = (Integer) xPS1.getPropertyValue("Width");
short sTableColumnRelativeSum = (Short) xPS1.getPropertyValue("TableColumnRelativeSum");
// Calculate conversion ration
double dRatio = (double) sTableColumnRelativeSum/(double) iWidth;
// Convert our 20 mm (2000) to unknown (relative) units
double dRelativeWidth = (double) 25000 * dRatio;
// Get table column separators
Object xObj = xPS1.getPropertyValue("TableColumnSeparators");
TableColumnSeparator[] xSeparators = (TableColumnSeparator[])UnoRuntime.queryInterface(
TableColumnSeparator[].class, xObj);
// Last table column separator position
double dPosition = sTableColumnRelativeSum - dRelativeWidth;
// Set set new position for all column separators
for (int i = xSeparators.length - 1 ; i >= 0 ; i--)
{
xSeparators[i].Position = (short) Math.ceil(dPosition);
dPosition -= dRelativeWidth;
}
// Do not forget to set TableColumnSeparators back! Otherwise, it doesn't work.
xPS1.setPropertyValue("TableColumnSeparators", xSeparators);
XCellRange xCellRangeHeader = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, xTextTable);
XCell xCellHeader = null;
XText xHeaderText = null;
xCellHeader = xCellRangeHeader.getCellByPosition(0,0); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("Records Center Total Capacity");
xCellHeader = xCellRangeHeader.getCellByPosition(1,0); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString(""+RecordCentrecapacity);
xCellHeader = xCellRangeHeader.getCellByPosition(0,1); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString("Current Inventory For Week Ending");
xCellHeader = xCellRangeHeader.getCellByPosition(1,1); // cols, rows
xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader);
xHeaderText.setString(""+currentTotalInventory);
你能帮我,我这个话题在新的,我想根据我的需要格式化的表格。
答
从SWriter例如在https://api.libreoffice.org/examples/examples.html#Java_examples:
//create instance of a text table
com.sun.star.text.XTextTable xTT = null;
// get the property set of the text table
com.sun.star.beans.XPropertySet xTTPS = UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, xTT);
// Change the BackColor
try {
xTTPS.setPropertyValue("BackTransparent", Boolean.FALSE);
xTTPS.setPropertyValue("BackColor",Integer.valueOf(13421823));
xTTRowPS.setPropertyValue("BackTransparent", Boolean.FALSE);
xTTRowPS.setPropertyValue("BackColor",Integer.valueOf(6710932));
} catch (Exception e) {
System.err.println("Couldn't change the color " + e);
e.printStackTrace(System.err);
}
// get the property set of the cursor
com.sun.star.beans.XPropertySet xTCPS = UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class,
xTCursor);
// Change the CharColor and add a Shadow
try {
xTCPS.setPropertyValue("CharColor",Integer.valueOf(255));
xTCPS.setPropertyValue("CharShadowed", Boolean.TRUE);
} catch (Exception e) {
System.err.println("Couldn't change the color " + e);
e.printStackTrace(System.err);
}
而且从https://wiki.openoffice.org/wiki/API/Samples/Java/Writer/TextTable#Horizontal_alignmentL
XPropertySet xPS = (XPropertySet) UnoRuntime.queryInterface(
XPropertySet.class, xTextTable);
xPS.setPropertyValue("HoriOrient", com.sun.star.text.HoriOrientation.NONE);
int iLeftMargin, iRightMargin; // I assume you know how do you want to align your table
xPS.setPropertyValue("LeftMargin", iLeftMargin);
xPS.setPropertyValue("RightMargin", iRightMargin);
又见C++在https://wiki.openoffice.org/wiki/Writer/API/Tables#Changing_Appearance例子。
EDIT:
这里是一个Python的例子,其设定的颜色和单细胞的垂直取向。 XrayTool显示TextTable单元格支持com.sun.star.text.CellProperties。
cell = table.getCellByName("A1")
cell.BackColor = int("FF00FF", 16)
cell.setPropertyValue("VertOrient", 2)
这是整个表格,但如何添加颜色或对齐表单单元格的文本而不是其他单元格 –