我知道复选框是Google表格中相对较新的功能,因此我正在尝试找到一种在单元格中自动创建复选框的方法。
到目前为止,我还没有在Google Apps脚本文档中找到有关此内容的参考。
目前我手动完成,但任何使用脚本的建议都会非常感激。
答案 0 :(得分:13)
我不确定他们什么时候做的,但是他们现在已经添加了。
使用类class sideCollectionView:UIView, UICollectionViewDelegateFlowLayout,UICollectionViewDataSource {
let arrayLbl = ["connection","achievement","template","setting"]
let arrayImg = ["connection","achievement","template","setting"]
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return arrayLbl.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! sideCollectionViewCell
cell.titleImg.image = UIImage(named: "\(arrayImg[indexPath.row])")
cell.titleLbl.text = arrayLbl[indexPath.row]
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: (self.frame.width / 2) - 40, height: (self.frame.width / 2) - 40)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsetsMake(25, 25, 10, 25)
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if indexPath.row == 0{
connectController()
print("connection")
let side = sideViewController()
side.bye()
}
if indexPath.row == 1{
let side = sideViewController()
side.bye()
print("achievement")
}
if indexPath.row == 2{
let side = sideViewController()
side.bye()
print("template")
}
if indexPath.row == 3{
let side = sideViewController()
side.bye()
print("setting")
}
}
lazy var collectionViews: UICollectionView = {
let layout = UICollectionViewFlowLayout()
let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
cv.backgroundColor = UIColor.clear
cv.dataSource = self
cv.delegate = self
return cv
}()
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
}
func setupViews(){
collectionViews.register(sideCollectionViewCell.self, forCellWithReuseIdentifier: "cell")
collectionViews.translatesAutoresizingMaskIntoConstraints = false
backgroundColor = UIColor.clear
addSubview(collectionViews)
collectionViews.topAnchor.constraint(equalTo: topAnchor, constant: 0).isActive = true
collectionViews.bottomAnchor.constraint(equalTo: bottomAnchor, constant: 0).isActive = true
collectionViews.centerYAnchor.constraint(equalTo: centerYAnchor, constant: 0).isActive = true
collectionViews.centerXAnchor.constraint(equalTo: centerXAnchor, constant: 0).isActive = true
collectionViews.widthAnchor.constraint(equalTo: widthAnchor, constant: 0).isActive = true
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc func connectController(){
let side = sideViewController()
side.bye()
}
@objc func settingController(){
let side = sideViewController()
side.bye()
}
@objc func achievementController(){
let side = sideViewController()
side.bye()
}
@objc func templateController(){
let side = sideViewController()
side.bye()
}
}
的{{3}}方法。示例:
DataValidationBuilder
答案 1 :(得分:9)
您要使用脚本在电子表格的单元格中创建复选框。如果我的理解是正确的,该解决方法如何?不幸的是,SpreadsheetApp类还没有用于创建复选框的方法。 (尝试使用这种方法时,会发生错误。)因此,我建议使用Sheets API创建它。
当我看到ConditionType
中的dataValidation
时,the document of BOOLEAN说
单元格的值必须为TRUE / FALSE或在条件值列表中。由数据验证支持。 “渲染为单元格”复选框。 ...
由此,我可以理解如何使用Sheets API创建复选框。以下脚本是示例脚本。这将为“ A1:C3”创建6个复选框。使用此脚本时,请按以下说明在高级Google服务和API控制台上启用Sheets API。
如果现在要使用用于使用Sheets API的脚本打开脚本编辑器,则可以通过访问此URL https://console.cloud.google.com/apis/library/sheets.googleapis.com/
为项目启用Sheets API。在此示例脚本中,将复选框创建到Sheet1的“ A1:C3”。请将此脚本用作容器绑定脚本。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetId = ss.getSheetByName("Sheet1").getSheetId();
var resource = {"requests": [
{
"repeatCell": {
"cell": {"dataValidation": {"condition": {"type": "BOOLEAN"}}},
"range": {"sheetId": sheetId, "startRowIndex": 0, "endRowIndex": 3, "startColumnIndex": 0, "endColumnIndex": 3},
"fields": "dataValidation"
}
},
{
"updateCells": {
"rows": [
{"values": [{"userEnteredValue": {"boolValue": true}}, {"userEnteredValue": {"boolValue": false}}, {"userEnteredValue": {"boolValue": false}}]},
{"values": [{"userEnteredValue": {"boolValue": true}}, {"userEnteredValue": {"boolValue": true}}, {"userEnteredValue": {"boolValue": false}}]},
{"values": [{"userEnteredValue": {"boolValue": true}}, {"userEnteredValue": {"boolValue": true}}, {"userEnteredValue": {"boolValue": true}}]}
],
"start": {"rowIndex": 0, "columnIndex": 0, "sheetId": sheetId},
"fields": "userEnteredValue"
}
}
]};
Sheets.Spreadsheets.batchUpdate(resource, ss.getId());
流 :
dataValidation
使用repeatCell
设置。boolValue
使用updateCells
设置。2018年6月22日,此脚本返回了服务器错误错误。
var rule = SpreadsheetApp.newDataValidation().withCriteria(SpreadsheetApp.DataValidationCriteria.CHECKBOX, ["TRUE", "FALSE"]).build();
SpreadsheetApp.getActiveSheet().getRange("A1").setDataValidation(rule);
如果我误解了你的问题,对不起。
答案 2 :(得分:4)
添加Google表格用户界面中的复选框,然后使用其中一个copyTo 方法Class Range。
Google Apps脚本电子表格服务并未包含可通过Google表格用户界面完成所有操作的方法。这是插入>的情况。复选框这是一个非常新的功能。
即使是录制宏功能也无法做到这一点。以下是一个片刻前录制的
/** @OnlyCurrentDoc */
function InsertCheckbox() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A1').activate();
/*
* Added to show the missing Insert > Checkbox step
*/
spreadsheet.getRange('B1').activate();
spreadsheet.getRange('A1').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
};
注意:如果您不想传递所有单元格属性(边框,公式,背景等,而不是SpreadsheetApp.CopyPasteType.PASTE_NORMAL
,请使用SpreadsheetApp.CopyPasteType.PASTE_DATA_VALIDATION
。
Stack Overflow上的相关问题
答案 3 :(得分:3)
该复选框是最近添加的数据验证标准。有趣的是,当我尝试调用“getDataValidation()'包含复选框的范围上的方法,抛出以下错误:
var rule = range.getDataValidation();
很抱歉,发生了服务器错误。请稍等一下再试一次。
与此同时,您可以通过在工作表中的某个位置放置一个复选框并将其数据验证复制到新范围来解决此问题。例如,如果" A1"是包含复选框的单元格,目标范围由包含3行的单个列组成:
var range = sheet.getRange("A1"); //checkbox template cell
var targetRange = sheet.getRange(rowIdex, colIndex, numOfRows, numOfCols);
range.copyTo(col, SpreadsheetApp.CopyPasteType.PASTE_DATA_VALIDATION);
var values = [["true"], ["false"], ["false"]];
targetRange.setValues(values);
答案 4 :(得分:2)
function onEdit() {
var cell = SpreadsheetApp.getActive().getRange('A1');
var array =['☐','☑'];
// var rule = SpreadsheetApp.newDataValidation().requireValueInList(['☐','☑']).build();
var rule = SpreadsheetApp.newDataValidation().requireValueInList(array, false).build()
cell.setDataValidation(rule);
var valor = array[1];
// Logger.log(valor);
if(cell.getValue() == valor){
cell.offset(0, 1).setValue("Aprobado");
} else{
cell.offset(0, 1).setValue("Reprobado");
}
}
答案 5 :(得分:2)
简单:
//There are two ways, using Range or using current cell or sheet or similar
//First is using current cell
function VoF() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getCurrentCell().offset(1, 0, 499, 1).setDataValidation(SpreadsheetApp.newDataValidation()
.setAllowInvalid(true)
.setHelpText('TRUE or FALSE')
.requireCheckbox() //if you customize this is possible that you dont get the boxes and the verification data could fail,so keep them standar with TRUE and FALSE
.build());
};
//Second is using Spreedsheet ranges
function myFunction() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('G1:G11').activate();
spreadsheet.getRange('G1:G11').setDataValidation(SpreadsheetApp.newDataValidation()
.setAllowInvalid(false)
.requireCheckbox()
.build());
};
答案 6 :(得分:0)
您现在可以直接在Range
或RangeList
上insertCheckboxes
(或removeCheckboxes
),而无需任何变通方法。您还可以使用文档中提供的替代方法签名来更改检查值/未检查值。
SpreadsheetApp.getActive()
.getRange('Sheet2!A2:A10')
.insertCheckboxes();
答案 7 :(得分:-1)
我同意您必须解决方法才能创建一个复选框。另一种方法可能是创建一个下拉列表。
function myFunction() {
var cell = SpreadsheetApp.getActive().getRange('A1');
var rule = SpreadsheetApp.newDataValidation().requireValueInList(['☐','☑']).build();
cell.setDataValidation(rule);
}