我正在尝试将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
}]
答案 0 :(得分:0)
我可以这样理解。如果我的理解是正确的,那么该修改如何?
在您的情况下,值将放入新表中。在这种情况下,可以将每个值放入每个单元格的起始索引。
在您的请求正文中,我认为这种修改后的请求是以下情况。
当通过一次API调用使用batchUpdate方法将值放入所有单元格时,有一点很重要。
startIndex
是60
。)时,行1的单元格的startIndex
并且第2列变为60 + 6 + 2 = 68
。 6
和2
的值分别是字符串sample
的长度和下一个单元格的偏移量。1
。这样,所有值都放在一个单元格中。当以上几点反映到您的请求正文中时,它变为如下。
{"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"}}
]}
当上面的请求正文用于表的startIndex
为57
的新表时,可以获得以下结果。如果您使用上述要求正文,请注意index
的值。