如何在C#

时间:2019-07-03 18:58:41

标签: c# google-docs google-docs-api

我正在尝试将3x3表格插入Google文档,然后使用C#将其文本插入表格单元格。我遇到了这个thread,它帮助我添加了表格并至少在其中一个单元格中获得了一些文本。

该线程中的答案表示要向新创建的表的startindex加4。我这样做了,我所有的文本都被添加到第一行的第二个单元格中。

您可以从下面的代码中看到,我希望在for循环中为每个单元格填充一些测试文本。因此,我不确定为什么将所有文本都放入一个单元格中。

var docId = "mydocid";

List<Request> requests = new List<Request>
{
    new Request()
    {
        InsertTable = new InsertTableRequest()
        {
            EndOfSegmentLocation = new EndOfSegmentLocation
            {
                SegmentId = ""
            },
            Columns = 3,
            Rows = 3
        }
    }
};

BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest {Requests = requests};

service.Documents.BatchUpdate(body, docId).Execute();

var doc = service.Documents.Get(docId).Execute();

var index = doc.Body.Content.FirstOrDefault(x => x.Table != null).StartIndex + 4;

requests = new List<Request>();

for (var i = 0; i < 3; i++)
{
    index++;

    requests.Add(new Request()
    {
        InsertText = new InsertTextRequest()
        {
            Text = "test 1",
            Location = new Location()
            {
                Index = index
            }
        }
    });

    index++;

    requests.Add(new Request()
    {
        InsertText = new InsertTextRequest()
        {
            Text = "test 2",
            Location = new Location()
            {
                Index = index
            }
        }
    });

    index++;

    requests.Add(new Request()
    {
        InsertText = new InsertTextRequest()
        {
            Text = "test 3",
            Location = new Location()
            {
                Index = index
            }
        }
    });
}

body = new BatchUpdateDocumentRequest { Requests = requests };

service.Documents.BatchUpdate(body, docId).Execute();

编辑:经过更多测试之后,我才意识到我最初并没有注意到一个单元格中的文本最终是这样-tttttttttest 3est 2est 1est 3est 2est 1est 3est 2est 1因此,看起来索引不一定用来表示将内容写入哪个单元格,但是是某种类型的子字符串函数。因此,显然我不理解如何遍历每一行和单元格以插入具有index属性的文本。

根据请求,这是将请求主体对象转换为json。

{
    "requests": [{
        "createNamedRange": null,
        "createParagraphBullets": null,
        "deleteContentRange": null,
        "deleteNamedRange": null,
        "deleteParagraphBullets": null,
        "deletePositionedObject": null,
        "deleteTableColumn": null,
        "deleteTableRow": null,
        "insertInlineImage": null,
        "insertPageBreak": null,
        "insertTable": null,
        "insertTableColumn": null,
        "insertTableRow": null,
        "insertText": {
            "endOfSegmentLocation": null,
            "location": {
                "index": 60,
                "segmentId": null,
                "ETag": null
            },
            "text": "test 1",
            "ETag": null
        },
        "replaceAllText": null,
        "updateParagraphStyle": null,
        "updateTableColumnProperties": null,
        "updateTableRowStyle": null,
        "updateTextStyle": null,
        "ETag": null
    }, {
        "createNamedRange": null,
        "createParagraphBullets": null,
        "deleteContentRange": null,
        "deleteNamedRange": null,
        "deleteParagraphBullets": null,
        "deletePositionedObject": null,
        "deleteTableColumn": null,
        "deleteTableRow": null,
        "insertInlineImage": null,
        "insertPageBreak": null,
        "insertTable": null,
        "insertTableColumn": null,
        "insertTableRow": null,
        "insertText": {
            "endOfSegmentLocation": null,
            "location": {
                "index": 61,
                "segmentId": null,
                "ETag": null
            },
            "text": "test 2",
            "ETag": null
        },
        "replaceAllText": null,
        "updateParagraphStyle": null,
        "updateTableColumnProperties": null,
        "updateTableRowStyle": null,
        "updateTextStyle": null,
        "ETag": null
    }, {
        "createNamedRange": null,
        "createParagraphBullets": null,
        "deleteContentRange": null,
        "deleteNamedRange": null,
        "deleteParagraphBullets": null,
        "deletePositionedObject": null,
        "deleteTableColumn": null,
        "deleteTableRow": null,
        "insertInlineImage": null,
        "insertPageBreak": null,
        "insertTable": null,
        "insertTableColumn": null,
        "insertTableRow": null,
        "insertText": {
            "endOfSegmentLocation": null,
            "location": {
                "index": 62,
                "segmentId": null,
                "ETag": null
            },
            "text": "test 3",
            "ETag": null
        },
        "replaceAllText": null,
        "updateParagraphStyle": null,
        "updateTableColumnProperties": null,
        "updateTableRowStyle": null,
        "updateTextStyle": null,
        "ETag": null
    }, {
        "createNamedRange": null,
        "createParagraphBullets": null,
        "deleteContentRange": null,
        "deleteNamedRange": null,
        "deleteParagraphBullets": null,
        "deletePositionedObject": null,
        "deleteTableColumn": null,
        "deleteTableRow": null,
        "insertInlineImage": null,
        "insertPageBreak": null,
        "insertTable": null,
        "insertTableColumn": null,
        "insertTableRow": null,
        "insertText": {
            "endOfSegmentLocation": null,
            "location": {
                "index": 63,
                "segmentId": null,
                "ETag": null
            },
            "text": "test 1",
            "ETag": null
        },
        "replaceAllText": null,
        "updateParagraphStyle": null,
        "updateTableColumnProperties": null,
        "updateTableRowStyle": null,
        "updateTextStyle": null,
        "ETag": null
    }, {
        "createNamedRange": null,
        "createParagraphBullets": null,
        "deleteContentRange": null,
        "deleteNamedRange": null,
        "deleteParagraphBullets": null,
        "deletePositionedObject": null,
        "deleteTableColumn": null,
        "deleteTableRow": null,
        "insertInlineImage": null,
        "insertPageBreak": null,
        "insertTable": null,
        "insertTableColumn": null,
        "insertTableRow": null,
        "insertText": {
            "endOfSegmentLocation": null,
            "location": {
                "index": 64,
                "segmentId": null,
                "ETag": null
            },
            "text": "test 2",
            "ETag": null
        },
        "replaceAllText": null,
        "updateParagraphStyle": null,
        "updateTableColumnProperties": null,
        "updateTableRowStyle": null,
        "updateTextStyle": null,
        "ETag": null
    }, {
        "createNamedRange": null,
        "createParagraphBullets": null,
        "deleteContentRange": null,
        "deleteNamedRange": null,
        "deleteParagraphBullets": null,
        "deletePositionedObject": null,
        "deleteTableColumn": null,
        "deleteTableRow": null,
        "insertInlineImage": null,
        "insertPageBreak": null,
        "insertTable": null,
        "insertTableColumn": null,
        "insertTableRow": null,
        "insertText": {
            "endOfSegmentLocation": null,
            "location": {
                "index": 65,
                "segmentId": null,
                "ETag": null
            },
            "text": "test 3",
            "ETag": null
        },
        "replaceAllText": null,
        "updateParagraphStyle": null,
        "updateTableColumnProperties": null,
        "updateTableRowStyle": null,
        "updateTextStyle": null,
        "ETag": null
    }, {
        "createNamedRange": null,
        "createParagraphBullets": null,
        "deleteContentRange": null,
        "deleteNamedRange": null,
        "deleteParagraphBullets": null,
        "deletePositionedObject": null,
        "deleteTableColumn": null,
        "deleteTableRow": null,
        "insertInlineImage": null,
        "insertPageBreak": null,
        "insertTable": null,
        "insertTableColumn": null,
        "insertTableRow": null,
        "insertText": {
            "endOfSegmentLocation": null,
            "location": {
                "index": 66,
                "segmentId": null,
                "ETag": null
            },
            "text": "test 1",
            "ETag": null
        },
        "replaceAllText": null,
        "updateParagraphStyle": null,
        "updateTableColumnProperties": null,
        "updateTableRowStyle": null,
        "updateTextStyle": null,
        "ETag": null
    }, {
        "createNamedRange": null,
        "createParagraphBullets": null,
        "deleteContentRange": null,
        "deleteNamedRange": null,
        "deleteParagraphBullets": null,
        "deletePositionedObject": null,
        "deleteTableColumn": null,
        "deleteTableRow": null,
        "insertInlineImage": null,
        "insertPageBreak": null,
        "insertTable": null,
        "insertTableColumn": null,
        "insertTableRow": null,
        "insertText": {
            "endOfSegmentLocation": null,
            "location": {
                "index": 67,
                "segmentId": null,
                "ETag": null
            },
            "text": "test 2",
            "ETag": null
        },
        "replaceAllText": null,
        "updateParagraphStyle": null,
        "updateTableColumnProperties": null,
        "updateTableRowStyle": null,
        "updateTextStyle": null,
        "ETag": null
    }, {
        "createNamedRange": null,
        "createParagraphBullets": null,
        "deleteContentRange": null,
        "deleteNamedRange": null,
        "deleteParagraphBullets": null,
        "deletePositionedObject": null,
        "deleteTableColumn": null,
        "deleteTableRow": null,
        "insertInlineImage": null,
        "insertPageBreak": null,
        "insertTable": null,
        "insertTableColumn": null,
        "insertTableRow": null,
        "insertText": {
            "endOfSegmentLocation": null,
            "location": {
                "index": 68,
                "segmentId": null,
                "ETag": null
            },
            "text": "test 3",
            "ETag": null
        },
        "replaceAllText": null,
        "updateParagraphStyle": null,
        "updateTableColumnProperties": null,
        "updateTableRowStyle": null,
        "updateTextStyle": null,
        "ETag": null
    }],
    "writeControl": null,
    "ETag": null
}

根据田边池的建议答案进行编辑。

所以这是代码的更新版本。

public class AddendumRow
{
    public string Title {get;set;}
    public string Value {get;set;}
    public string Description {get;set;}
}


var tableRows = new List<AddendumRow>()
{
    new AddendumRow(){Title = "Row 1 Title", Value = "Row 1 Value", Description = "Row 1 Description" },
    new AddendumRow(){Title = "Row 2 Title", Value = "Row 2 Value", Description = "Row 2 Description" },
    new AddendumRow(){Title = "Row 3 Title", Value = "Row 3 Value", Description = "Row 3 Description" }
};

List<Request> requests = new List<Request>
{
    new Request()
    {
        InsertTable = new InsertTableRequest()
        {
            EndOfSegmentLocation = new EndOfSegmentLocation
            {
                SegmentId = ""
            },
            Columns = 3,
            Rows = tableRows.Count
        }
    }
};

BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest {Requests = requests};

service.Documents.BatchUpdate(body, docId).Execute();

var doc = service.Documents.Get(docId).Execute();

var index = doc.Body.Content.FirstOrDefault(x => x.Table != null).StartIndex + 3;

requests = new List<Request>();

foreach (var row in tableRows){

    requests.Add(new Request()
    {
        InsertText = new InsertTextRequest()
        {
            Text = row.Title,
            Location = new Location()
            {
                Index = index
            }
        }
    }); 
    index += 2;

    requests.Add(new Request()
    {
        InsertText = new InsertTextRequest()
        {
            Text = row.Value,
            Location = new Location()
            {
                Index = index
            }
        }
    }); 
    index += 2;

    requests.Add(new Request()
    {
        InsertText = new InsertTextRequest()
        {
            Text = row.Description,
            Location = new Location()
            {
                Index = index
            }
        }
    }); 

    index += 3;
}


body = new BatchUpdateDocumentRequest { Requests = requests };

var json = JsonConvert.SerializeObject(requests);

当我运行该代码(相信与您的示例匹配)时,它将所有内容都放入第一行的第一单元格中。该单元格的内容是...

RoRoRowRoRoRowRoRoRow 3 Descriptionw 3 Valuew 3 Title 2 Descriptionw 2 Valuew 2 Title 1 Descriptionw 1 Valuew 1 Title

您可以看到它似乎正在使用索引作为某种子字符串方法,将文本插入到现有文本中而不是移至下一个单元格。

此行的结果json-var json = JsonConvert.SerializeObject(requests);在下面。从我的角度来看,它几乎与您的示例相符,但是具有许多其他属性。

[{
    "createNamedRange": null,
    "createParagraphBullets": null,
    "deleteContentRange": null,
    "deleteNamedRange": null,
    "deleteParagraphBullets": null,
    "deletePositionedObject": null,
    "deleteTableColumn": null,
    "deleteTableRow": null,
    "insertInlineImage": null,
    "insertPageBreak": null,
    "insertTable": null,
    "insertTableColumn": null,
    "insertTableRow": null,
    "insertText": {
        "endOfSegmentLocation": null,
        "location": {
            "index": 58,
            "segmentId": null,
            "ETag": null
        },
        "text": "Row 1 Title",
        "ETag": null
    },
    "replaceAllText": null,
    "updateParagraphStyle": null,
    "updateTableColumnProperties": null,
    "updateTableRowStyle": null,
    "updateTextStyle": null,
    "ETag": null
}, {
    "createNamedRange": null,
    "createParagraphBullets": null,
    "deleteContentRange": null,
    "deleteNamedRange": null,
    "deleteParagraphBullets": null,
    "deletePositionedObject": null,
    "deleteTableColumn": null,
    "deleteTableRow": null,
    "insertInlineImage": null,
    "insertPageBreak": null,
    "insertTable": null,
    "insertTableColumn": null,
    "insertTableRow": null,
    "insertText": {
        "endOfSegmentLocation": null,
        "location": {
            "index": 60,
            "segmentId": null,
            "ETag": null
        },
        "text": "Row 1 Value",
        "ETag": null
    },
    "replaceAllText": null,
    "updateParagraphStyle": null,
    "updateTableColumnProperties": null,
    "updateTableRowStyle": null,
    "updateTextStyle": null,
    "ETag": null
}, {
    "createNamedRange": null,
    "createParagraphBullets": null,
    "deleteContentRange": null,
    "deleteNamedRange": null,
    "deleteParagraphBullets": null,
    "deletePositionedObject": null,
    "deleteTableColumn": null,
    "deleteTableRow": null,
    "insertInlineImage": null,
    "insertPageBreak": null,
    "insertTable": null,
    "insertTableColumn": null,
    "insertTableRow": null,
    "insertText": {
        "endOfSegmentLocation": null,
        "location": {
            "index": 62,
            "segmentId": null,
            "ETag": null
        },
        "text": "Row 1 Description",
        "ETag": null
    },
    "replaceAllText": null,
    "updateParagraphStyle": null,
    "updateTableColumnProperties": null,
    "updateTableRowStyle": null,
    "updateTextStyle": null,
    "ETag": null
}, {
    "createNamedRange": null,
    "createParagraphBullets": null,
    "deleteContentRange": null,
    "deleteNamedRange": null,
    "deleteParagraphBullets": null,
    "deletePositionedObject": null,
    "deleteTableColumn": null,
    "deleteTableRow": null,
    "insertInlineImage": null,
    "insertPageBreak": null,
    "insertTable": null,
    "insertTableColumn": null,
    "insertTableRow": null,
    "insertText": {
        "endOfSegmentLocation": null,
        "location": {
            "index": 65,
            "segmentId": null,
            "ETag": null
        },
        "text": "Row 2 Title",
        "ETag": null
    },
    "replaceAllText": null,
    "updateParagraphStyle": null,
    "updateTableColumnProperties": null,
    "updateTableRowStyle": null,
    "updateTextStyle": null,
    "ETag": null
}, {
    "createNamedRange": null,
    "createParagraphBullets": null,
    "deleteContentRange": null,
    "deleteNamedRange": null,
    "deleteParagraphBullets": null,
    "deletePositionedObject": null,
    "deleteTableColumn": null,
    "deleteTableRow": null,
    "insertInlineImage": null,
    "insertPageBreak": null,
    "insertTable": null,
    "insertTableColumn": null,
    "insertTableRow": null,
    "insertText": {
        "endOfSegmentLocation": null,
        "location": {
            "index": 67,
            "segmentId": null,
            "ETag": null
        },
        "text": "Row 2 Value",
        "ETag": null
    },
    "replaceAllText": null,
    "updateParagraphStyle": null,
    "updateTableColumnProperties": null,
    "updateTableRowStyle": null,
    "updateTextStyle": null,
    "ETag": null
}, {
    "createNamedRange": null,
    "createParagraphBullets": null,
    "deleteContentRange": null,
    "deleteNamedRange": null,
    "deleteParagraphBullets": null,
    "deletePositionedObject": null,
    "deleteTableColumn": null,
    "deleteTableRow": null,
    "insertInlineImage": null,
    "insertPageBreak": null,
    "insertTable": null,
    "insertTableColumn": null,
    "insertTableRow": null,
    "insertText": {
        "endOfSegmentLocation": null,
        "location": {
            "index": 69,
            "segmentId": null,
            "ETag": null
        },
        "text": "Row 2 Description",
        "ETag": null
    },
    "replaceAllText": null,
    "updateParagraphStyle": null,
    "updateTableColumnProperties": null,
    "updateTableRowStyle": null,
    "updateTextStyle": null,
    "ETag": null
}, {
    "createNamedRange": null,
    "createParagraphBullets": null,
    "deleteContentRange": null,
    "deleteNamedRange": null,
    "deleteParagraphBullets": null,
    "deletePositionedObject": null,
    "deleteTableColumn": null,
    "deleteTableRow": null,
    "insertInlineImage": null,
    "insertPageBreak": null,
    "insertTable": null,
    "insertTableColumn": null,
    "insertTableRow": null,
    "insertText": {
        "endOfSegmentLocation": null,
        "location": {
            "index": 72,
            "segmentId": null,
            "ETag": null
        },
        "text": "Row 3 Title",
        "ETag": null
    },
    "replaceAllText": null,
    "updateParagraphStyle": null,
    "updateTableColumnProperties": null,
    "updateTableRowStyle": null,
    "updateTextStyle": null,
    "ETag": null
}, {
    "createNamedRange": null,
    "createParagraphBullets": null,
    "deleteContentRange": null,
    "deleteNamedRange": null,
    "deleteParagraphBullets": null,
    "deletePositionedObject": null,
    "deleteTableColumn": null,
    "deleteTableRow": null,
    "insertInlineImage": null,
    "insertPageBreak": null,
    "insertTable": null,
    "insertTableColumn": null,
    "insertTableRow": null,
    "insertText": {
        "endOfSegmentLocation": null,
        "location": {
            "index": 74,
            "segmentId": null,
            "ETag": null
        },
        "text": "Row 3 Value",
        "ETag": null
    },
    "replaceAllText": null,
    "updateParagraphStyle": null,
    "updateTableColumnProperties": null,
    "updateTableRowStyle": null,
    "updateTextStyle": null,
    "ETag": null
}, {
    "createNamedRange": null,
    "createParagraphBullets": null,
    "deleteContentRange": null,
    "deleteNamedRange": null,
    "deleteParagraphBullets": null,
    "deletePositionedObject": null,
    "deleteTableColumn": null,
    "deleteTableRow": null,
    "insertInlineImage": null,
    "insertPageBreak": null,
    "insertTable": null,
    "insertTableColumn": null,
    "insertTableRow": null,
    "insertText": {
        "endOfSegmentLocation": null,
        "location": {
            "index": 76,
            "segmentId": null,
            "ETag": null
        },
        "text": "Row 3 Description",
        "ETag": null
    },
    "replaceAllText": null,
    "updateParagraphStyle": null,
    "updateTableColumnProperties": null,
    "updateTableRowStyle": null,
    "updateTextStyle": null,
    "ETag": null
}]

1 个答案:

答案 0 :(得分:0)

  • 您要向Google文档追加一个具有3行3列的新表。
  • 您要将这些值应用于所有单元格。

我可以这样理解。如果我的理解是正确的,那么该修改如何?

修改点:

  • 在您的情况下,值将放入新表中。在这种情况下,可以将每个值放入每个单元格的起始索引。

  • 在您的请求正文中,我认为这种修改后的请求是以下情况。

    • 具有3行3列的新表格已附加到Google文档中。并且表格中的所有单元格均为空。
    • 将值应用于所有单元格。
    • 附加表的
    • startIndexbody.content[].startIndex)是57
    • 在这种情况下,第1行和第1列的startIndexbody.content[].table.tableRows[0].tableCells[0].content[0].startIndex)为'60'。其他startIndex个单元如下。

      enter image description here

      • 从上图发现,列和行的单元格的偏移量分别为23
  • 当通过一次API调用使用batchUpdate方法将值放入所有单元格时,有一点很重要。

    • 例如,将“ sample”的值放入行1和列1的单元格(startIndex60。)时,行1的单元格的startIndex并且第2列变为60 + 6 + 2 = 6862的值分别是字符串sample的长度和下一个单元格的偏移量。
    • 在您的脚本中,偏移量为1。这样,所有值都放在一个单元格中。
    • 作为将值放入空单元格的一种简单方法,对于具有3行3列的表,它通过将第3行和第3列的单元格中的值反向放置来创建请求主体订单。

当以上几点反映到您的请求正文中时,它变为如下。

修改后的请求正文:

{"requests":[
    {"insertText":{"location":{"index":78},"text":"c3"}},
    {"insertText":{"location":{"index":76},"text":"b3"}},
    {"insertText":{"location":{"index":74},"text":"a3"}},
    {"insertText":{"location":{"index":71},"text":"c2"}},
    {"insertText":{"location":{"index":69},"text":"b2"}},
    {"insertText":{"location":{"index":67},"text":"a2"}},
    {"insertText":{"location":{"index":64},"text":"c1"}},
    {"insertText":{"location":{"index":62},"text":"b1"}},
    {"insertText":{"location":{"index":60},"text":"a1"}}
]}

结果:

当上面的请求正文用于表的startIndex57的新表时,可以获得以下结果。如果您使用上述要求正文,请注意index的值。

enter image description here

参考文献: