嗨,我正在尝试从Google幻灯片中创建的文本框中读取值
因此,我通过为数组中的每个值调用此函数来创建多个文本框
function newTextBox(textBoxID, xpos, ypos, textBoxText) {
var elementId = textBoxID;
var requests = [{
createShape: {
objectId: elementId,
shapeType: 'TEXT_BOX',
elementProperties: {
pageObjectId: pageId,
'size': {
'width': {
'magnitude': 53.5748,
'unit': 'PT'
},
'height': {
'magnitude': 22.6772,
'unit': 'PT'
}
},
transform: {
scaleX: 1,
scaleY: 1,
translateX: xpos,
translateY: ypos,
unit: 'PT'
}
}
}
},
// Insert text into the box, using the supplied element ID.
{
insertText: {
objectId: elementId,
insertionIndex: 0,
text: textBoxText
}
}];
// Execute the request.
var createTextboxWithTextResponse = Slides.Presentations.batchUpdate({
requests: requests
}, presentationId);
var createShapeResponse = createTextboxWithTextResponse.replies[0].createShape;
console.log('Created textbox with ID: %s', createShapeResponse.objectId);
}
因此textBoxID
是我定义的ID,以便以后参考。 textBoxText
最初设置为0。
此脚本的目的是将文本框中的每个值与我拥有的数组中的值进行比较。然后完成计算,然后更新值。 我见过很多类似的问题,但似乎找不到正确的答案。
我不想只更新值,我特别需要读取值。
我基本上需要的是类似textBoxID[1].getText()
的东西,但是我找不到类似的东西/可以实现相同目标的东西。任何帮助都会被广泛接受
答案 0 :(得分:1)
@Override
public void massInsert(List<Object> objects) throws Exception {
Session session = this.sessionFactory.getCurrentSession();
// Create the query. It is important to consider that we will be using a
// native query, which we will build from scratch. This is done in order to improve the insert speed.
String hql = "insert into TABLE (column1, column2) VALUES ";
// For each object, add a new object to insert.
// In the end we will need to remove the last comma.
for (int i = 0; i < objects.size(); i++) {
hql = hql.concat("(?, ?),");
}
hql = hql.substring(0, hql.length()-1);
// Create the query.
Query query = session.createSQLQuery(hql);
// Now, for each object, set the needed parameters.
int index = 1;
for (Object o : objects) {
query.setParameter(index++, o.getAttribute1());
query.setParameter(index++, o.getAttribute2());
}
// Execute the query.
query.executeUpdate();
}
的文本框不存在时,您要创建新的文本框。textBoxID
的文本框存在时,您想要修改文本框中的值。textBoxID
的功能。如果我的理解正确,那么这个答案如何?请认为这只是几个可能的答案之一。
在此修改中,作为示例情况,文本框的初始值为newTextBox
。当幻灯片中不存在该文本框时,将创建新的文本框。当幻灯片中存在文本框时,将修改文本框的值。在这种情况下,0
将添加到现有值。
在此模式下,将使用1
脚本。使用此功能之前,请设置变量newTextBox
,presentationId
和pageId
。 data
是一个样本值。
data
在这种模式下,使用// Please set following variables.
const presentationId = "###";
const pageId = "###";
function newTextBox(textBoxID, xpos, ypos, textBoxText) {
var elementId = textBoxID;
var requests = [
{createShape: {objectId: textBoxID, shapeType: 'TEXT_BOX', elementProperties: {pageObjectId: pageId, size: {width: {magnitude: 53.5748, unit: 'PT'}, height: {magnitude: 22.6772, unit: 'PT'}}, transform: {scaleX: 1, scaleY: 1, translateX: xpos, translateY: ypos, unit: 'PT'}}}},
{insertText: {objectId: textBoxID, insertionIndex: 0, text: textBoxText}}
];
var createTextboxWithTextResponse = Slides.Presentations.batchUpdate({requests: requests}, presentationId);
var createShapeResponse = createTextboxWithTextResponse.replies[0].createShape;
Logger.log('Created textbox with ID: %s', createShapeResponse.objectId);
}
// Please run this function.
function myFunction() {
var data = [
{textBoxID: "###", xpos: ###, ypos: ###, textBoxText: "0"},
{textBoxID: "###", xpos: ###, ypos: ###, textBoxText: "0"},
{textBoxID: "###", xpos: ###, ypos: ###, textBoxText: "0"},
];
const slide = SlidesApp.openById(presentationId).getSlideById(pageId);
const obj = slide.getShapes().reduce((o, e) => {
o[e.getObjectId()] = e;
return o;
}, {});
ar.forEach(({textBoxID, xpos, ypos, textBoxText}) => {
if (textBoxID in obj) {
const oldValue = obj[textBoxID].getText().asString(); // Here, you can retrieve the value of existing textbox.
const newValue = Number(oldValue) + 1;
obj[textBoxID].getText().replaceAllText(oldValue, newValue);
} else {
newTextBox(textBoxID, xpos, ypos, textBoxText);
}
});
}
的值创建一个请求主体,并将其用于batchUpdate方法。这样,仅使用一个API调用。使用此功能之前,请设置变量data
,presentationId
和pageId
。 data
是一个样本值。
data
function myFunction() {
// Please set following variables.
var data = [
{textBoxID: "###", xpos: ###, ypos: ###, textBoxText: "0"},
{textBoxID: "###", xpos: ###, ypos: ###, textBoxText: "0"},
{textBoxID: "###", xpos: ###, ypos: ###, textBoxText: "0"},
];
const presentationId = "###";
const pageId = "###";
const slide = SlidesApp.openById(presentationId).getSlideById(pageId);
const obj = slide.getShapes().reduce((o, e) => {
o[e.getObjectId()] = e;
return o;
}, {});
const requests = data.reduce((ar, {textBoxID, xpos, ypos, textBoxText}) => {
if (textBoxID in obj) {
const oldValue = obj[textBoxID].getText().asString(); // Here, you can retrieve the value of existing textbox.
const newValue = Number(oldValue) + 1;
obj[textBoxID].getText().replaceAllText(oldValue, newValue);
} else {
ar.push([
{createShape: {objectId: textBoxID, shapeType: 'TEXT_BOX', elementProperties: {pageObjectId: pageId, size: {width: {magnitude: 53.5748, unit: 'PT'}, height: {magnitude: 22.6772, unit: 'PT'}}, transform: {scaleX: 1, scaleY: 1, translateX: xpos, translateY: ypos, unit: 'PT'}}}},
{insertText: {objectId: textBoxID, insertionIndex: 0, text: textBoxText}}
]);
}
return ar;
}, []);
if (requests.length > 0) {
var createTextboxWithTextResponse = Slides.Presentations.batchUpdate({requests: requests}, presentationId);
Logger.log(createTextboxWithTextResponse)
}
}
。因此,我认为您的脚本编辑器可能与启用V8运行时一起使用。所以我将脚本修改为V8。请注意这一点。如果我误解了您的问题,而这不是您想要的方向,我深表歉意。