2

我曾问过一个关于如何在 Excel 中使用 Office.js 获取单元格格式的问题。我又遇到了同样的问题,但这次是关于 ms-word,我有可能获得在 word 应用程序中创建的表格单元格中的格式化文本。

在此处输入图像描述

虽然我能够将选定的文本作为 html 获取,但它为我提供了我需要的样式

 Office.context.document.getSelectedDataAsync(Office.CoercionType.Html,
        function (result) {
            if (result.status === Office.AsyncResultStatus.Succeeded) {
                showNotification('The selected text is:', '"' + result.value + '"');
            } else {
                showNotification('Error:', result.error.message);
            }
        });

我只想要当前单元格格式的文本 谢谢!

4

1 回答 1

0

很好的问题Pradeep。为了获得单元格格式,您需要使用当前预览的 Word 1.3 API。您可以在此处查看如何试用 1.3 API 。(请注意,您需要使用该页面上披露的预览版 Office.js CDN!)在此处查看所有新增内容。

现在,一旦您准备好尝试 1.3,以下代码将为您提供单元格格式信息。一般来说,代码正在做的是

  1. 验证选择是否在表格的单元格内。
  2. 一旦验证完成,我们就得到了细胞的“主体”。Body 对象包含 FONT 对象,它将包含您需要的所有格式属性。(即颜色、字体名称、粗体、斜体等。您还可以使用 getHtml() 函数获取正文的 HTML。

在下面找到代码来做到这一点。请注意,此代码将返回您在整个单元格中应用的格式。如果你想更上一层楼,也就是逐字逐句获取格式信息,那么你需要对 body 对象应用split方法,这样你就可以遍历并获取每个返回范围的格式信息. 希望这有帮助!编码快乐!!

function getFormattedText() {

        Word.run(function (context) {
            //step 1: lets get the selection's range. and find out if its within a table cell.....
            var mySelection = context.document.getSelection().parentTableCell;
            context.load(mySelection);
            return context.sync()
            .then(function () {
                if (mySelection.isNull == true) {
                    //selection is not within a cell..... 
                    console.log("selection not in a header");


                }
                else {

                    // the selection is inside a cell! lets get the content....
                    var body = mySelection.body;
                    context.load(body, { expand: 'font' });
                    return context.sync()
                    .then(function () {
                        console.log(body.font.name + " " + body.font.color);  // at this point all the font properties are available, bold, italic color.. etc...

                    })
                      .catch(function (e) {

                         console.log(e.message);
                      });
                   
                }
            })
            .catch(function (e) {

               console.log(e.message);
            });

        });
    }

于 2016-06-28T18:30:30.820 回答