在Aspose-Cells中的一个单元格中应用多个样式

时间:2015-01-18 07:19:31

标签: java excel aspose-cells

我想在一个单元格中添加多个样式。

EX: 想要 一些 帮助

现在我没有一次全文。我一次只有一大块(喜欢,"我","旺旺","一些","帮助"以及相关的风格) 。但是我需要设置在一个单元格中格式化的整个字符串。

我如何使用Aspose.cells和Java?

1 个答案:

答案 0 :(得分:1)

您可以获取所选字符的FontSetting对象,然后更改样式。来自Aspose文档的文章参考是http://goo.gl/GhtDDy

修改 API中的setValue()方法将设置完整的值。在您的情况下,您有相关样式的块。理想情况下,应该有appendValue(String,Style)之类的方法,但Aspose.Cells库中不存在这样的方法。请在Aspose forums中提出此功能。

检查以下方法,您可以使用当前的API在场景中应用有限的样式,仅使用字体设置。

我假设你有一个字符串的数组列表(值的块)和一个样式的数组列表(每个块的相关样式)。分隔符可以是空格。

public static void main(String[] args) throws Exception
{
    // Instantiating a Workbook object
    Workbook workbook = new Workbook();

    // Accessing the added worksheet in the Excel file
    Worksheet worksheet = workbook.getWorksheets().get(0);
    Cells cells = worksheet.getCells();

    ArrayList<String> values = new ArrayList<String>();
    ArrayList<Style> styles = new ArrayList<Style>();

    // Separator character
    String separator = " ";

    // I
    values.add("I");
    styles.add(new Style()); styles.get(0).getFont().setBold(true);
    // Want
    values.add("Want");
    styles.add(new Style()); styles.get(1).getFont().setBold(false);
    // Some
    values.add("Some");
    styles.add(new Style()); styles.get(2).getFont().setBold(true);
    // Help
    values.add("Help");
    styles.add(new Style()); styles.get(3).getFont().setBold(false);

    // Get cell A1
    Cell cell = cells.get("A1");

    appendValuesWithStyles(cell, values, styles, separator);

    workbook.save(Common.DATA_DIR + "cellstyle.xlsx");
}

private static void appendValuesWithStyles(Cell cell, ArrayList<String> values, ArrayList<Style> styles, String separator)
{
    // Lets combine all chunks, because we can only use setValue()
    String allCharacters = "";
    // First set the whole value in cell
    int iValue = 0;
    for (String value : values)
    {
        allCharacters = allCharacters + value;
        if (iValue < values.size())
            allCharacters = allCharacters + separator;

        iValue++;
    }

    // Set the value once
    cell.setValue(allCharacters);

    // Now set the styles
    int startIndex = 0, valueLength = 0;
    for (int iStyle = 0 ; iStyle < styles.size() ; iStyle++)
    {
        // Get the associated value and the style.
        String value = values.get(iStyle);
        Style style = styles.get(iStyle);

        // We need the start character and length of string to set the style
        valueLength = value.length();

        cell.characters(startIndex, valueLength).getFont().setBold(style.getFont().isBold());

        // Increment the start index
        startIndex = startIndex + valueLength + separator.length();
    }
}