Как дублировать слайд с помощью API Google Slide

Я установил API Google Slide, и он работает отлично. Я могу добавить и изменить слайд, но мне нужно дублировать конкретный слайд по идентификатору.
Я следую за документацией GOOGLE SLIDE API и нашел эту функцию Google slide api дубликат объекта но это дает мне ошибку.
это моя функция кода:

'duplicateObject'=>array(
'objectId'=>'g796f0ce3dc2930a6_1',
'objectIds'=>array(
'{{ARTICLE_NAME}}'=>'Article_1',
'{{ARTICLE_PRICE}}'=> '100',
'{{ARTICLE_QT}}'=>'5',
'{{ARTICLE_HT}}'=>'500',
),
),

И это ошибка:

Invalid requests[0].duplicateObject: The object with objectId ARTICLE_NAME could not be found

Мой слайд с идентификатором g796f0ce3dc2930a6_1 похоже :

введите описание изображения здесь

1

Решение

Это мое решение для решения этой проблемы:

  1. Шаг 1 — создайте одну презентацию с таблицей слайдов
  2. шаг 2 — создать пустую презентацию
  3. шаг 3 — вызов презентации, дубликат слайда с помощью созданной мной функции:

NB: $external_page есть все слайды вашей презентации, так что вы можете зациклить его так

    public function createSingleSlide(array $slide_elements,string         $presentationId,string $id_slide_multiple){
$external_page = $this->getPresentation($presentationId);
$index = 0;
foreach ($external_page['slides'] as $key => $value) {

if($value['objectId'] != $id_slide_multiple ){

// create a blank slide
$slideId = 'slide_'.rand();
$requests_slide = $this->createSlide($slideId,$index);
$response = $this->executeRequest($requests_slide);

foreach ($value['pageElements'] as $key_pe => $value_pe) {

// we have to do test here if shape or table
if(isset($value_pe['shape'])){

$shapeType  = $value_pe['shape']['shapeType'];
$elementId  = $shapeType.'_'.rand();
$textElements =  $value_pe['shape']['text']['textElements'];

$requests = $this->createShape($elementId,$shapeType,$slideId,$value_pe['size'],$value_pe['transform']);

$response = $this->executeRequest($requests);

//insert all text of shape, table...etcs
foreach ($textElements as $key_text => $value_text) {

$text = $value_text['textRun']['content'];

if(isset($text) && !empty($text && $text !="\n") ){

$requests_text = $this->insertText($elementId,$text);
$response = $this->executeRequest($requests_text);

$requests_style = $this->updateTextStyle($elementId,$value_text['textRun']['style']);
$response = $this->executeRequest($requests_style);
}
}
}elseif (isset($value_pe['table'])) {

$rows       = $value_pe['table']['rows'];
$columns    = $value_pe['table']['columns'];
$elementId  = 'Table_'.rand();

$requests_table = $this->createTable($elementId,$slideId,$value_pe['size'],$value_pe['transform'],$rows,$columns);
$response = $this->executeRequest($requests_table);

// insert all rows in table
foreach ($value_pe['table']['tableRows'] as $key_rows => $value_rows) {
foreach ($value_rows['tableCells'] as $key_cells => $value_cells) {

$textElements           = $value_cells['text']['textElements'];
$tableCellProperties    = $value_cells['tableCellProperties'];
$location               = array();
$rowSpan                = $value_cells['rowSpan'];
$columnSpan             = $value_cells['columnSpan'];

if(isset($value_cells['location']['rowIndex'])){
$location['rowIndex'] = $value_cells['location']['rowIndex'];
}
if(isset($value_cells['location']['columnIndex'])){
$location['columnIndex'] = $value_cells['location']['columnIndex'];
}

//insert all text of shape, table...etcs
foreach ($textElements as $key_text => $value_text) {

$text = $value_text['textRun']['content'];
$requests_text_and_style =array();

if(isset($text) && !empty($text && $text !="\n") ){

$requests_text_and_style[] = $this->insertTableText($elementId,$text,$location);

$requests_text_and_style[] = $this->updateTableCellProperties($elementId,$tableCellProperties,$location,$rowSpan,$columnSpan);

$requests_text_and_style[] = $this->updateTextStyleTable($elementId,$value_text['textRun']['style'],$location);

$response = $this->executeRequest($requests_text_and_style);
}
}
}
}

}
}

// replace varaibales in slide $slideId
$requests_texts = array();

if(isset($slide_elements['replaceText'])){
$requests_texts[] = $this->replaceText($slide_elements['replaceText']);
}
if(isset($slide_elements['replaceAllShapesWithImage'])){
$requests_texts[] = $this->replaceAllShapesWithImage($slide_elements['replaceAllShapesWithImage']);
}

$response = $this->executeRequest($requests_texts);
$index++;
}

}
}

Ты можешь получить $presentationId по вашей ссылке презентация G-слайда https://docs.google.com/presentation/d/{{presentationId}}/edit#slide=id.p
Все из этой функции:

  • createSlide ()
  • ExecuteRequest
  • createShape
  • InsertText
  • updateTextStyle
  • ReplaceText
  • replaceAllShapesWithImage
  • CreateTable

Вы можете найти, как создать его на Google slide API Doc.it очень просто.
Хорошо выглядишь!

1

Другие решения

Обновление 5/26: API слайдов теперь поддерживает ограничение ReplaceAllTestRequest для отдельных страниц. Обновлен ответ для отражения.

DuplicateObjectRequest — это правильный запрос для дублирования слайда. Тем не менее objectIds Параметр не делает то, что вы думаете: он отображает objectIds из элементов страницы в вашем существующем слайде в objectId, который вы хотите, чтобы они были в вашем новом слайде. Вещи как {{ARTICLE_NAME}} не objectIds, это текст в ячейках таблицы.

Чтобы заменить этот текст в ваших слайдах, вы можете использовать ReplaceAllTextRequest. Вы можете использовать pageObjectIds параметр в этом запросе, чтобы ограничить замены только дубликат слайда, который вы создали. Убедитесь, что вы указали objectId в DuplicateObjectRequest, который будет назначен новому слайду.

1

Я думаю, что вы пытаетесь сделать, это дублировать слайд, а затем заменить текст. Я была такая же проблема.

1- Использование duplicateObject чтобы дублировать слайд, назначьте новый идентификатор объекта. Это очень важно (проверьте документы, чтобы увидеть действительные значения).https://developers.google.com/slides/reference/rest/v1/presentations/request#duplicateobjectrequest

2- Использование replaceAllText заменить ваш заполнитель. Не забудьте включить pageObjectId нового дублированного объекта. В противном случае его замена будет применяться ко всем слайдам в вашей презентации.

образец:

 {
duplicateObject: {
objectId: 'g796f0ce3dc2930a6_1',
objectIds: { 'g796f0ce3dc2930a6_1': 'NEW_OBJECT_ID' }
}
},
{
replaceAllText: {
pageObjectIds: ['NEW_OBJECT_ID'],
containsText: {
text: '{{ARTICLE_NAME}}',
matchCase: true
},
replaceText: 'Article_1'
}
}

Возможно, вам придется включить больше replaceAllText для всех ваших заполнителей

1
По вопросам рекламы [email protected]