我正在尝试将数组写到电子表格中,但是做错了。我读过许多帖子,说可以做我正在做的事情,但是不起作用。请参阅下面的最后一行代码
最后一行代码
'''consol_sheet.getRange(2,1,x,10).setValues(final_values);'''
我收到我的错误
“无法将数组转换为对象”
function iterateSheets()
{
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('filesSheet');
sh.clear();
var folder=DriveApp.getFolderById('1axTLHOBPhl5_u7ngFOxViHg14OSw7pVC');//replace id with actual id of folder
var files=folder.getFilesByType(MimeType.GOOGLE_SHEETS);
var consol_sheet = SpreadsheetApp.openById('18JnkQYa1L-FhXFmKJBrqJ6GI7BBO-V8QAVKP8PLLoXo').getActiveSheet();
var x=2;
var z=0;
var final_values = new Array(50000);
while(files.hasNext())
{
var file=files.next();
var ts=SpreadsheetApp.openById(file.getId());
var allShts=ts.getSheets();
for(var i=0;i<3;i++) //allShts.length
{
var consol_values = allShts[i].getRange(8,1,40,26).getValues(); //.getRange(8, 1, 1, 1).getValues();
var headers = allShts[i].getRange(7,6,1,20).getValues(); //.getRange(8, 1, 1, 1).getValues();
var position= allShts[i].getRange("B1").getValue();
var period = allShts[i].getRange("B2").getValue();
var email = allShts[i].getRange("B3").getValue();
for (var z = 0;z<20;z++)//
{
for (var y= 0;y<40;y++)
{
if (consol_values[y][i] != "")
{
/* consol_sheet.getRange(x,1).setValue(consol_values[y][0]); //AI pack
consol_sheet.getRange(x,3).setValue(consol_values[y][1]); //measure
consol_sheet.getRange(x,4).setValue(email);
consol_sheet.getRange(x,5).setValue(position);
final_values[x] = [];
final_values[x][0] =consol_values[y][0]; //AI pack
//blank
final_values[x][2] =(consol_values[y][1]); //measure
final_values[x][3] =(email);
final_values[x][4] =(position);
final_values[x][5] =(headers[0][z]);//location
final_values[x][6] =1;
final_values[x][7] =(period);
final_values[x][8] =(consol_values[y][3]); //price
final_values[x][9] =(consol_values[y][z+5]); //fcst
if (consol_values[y][z+5] != "")
{
final_values[x][10] =(consol_values[y][25]); //fcst value
}
x = Number(x)+1 //row count for consolidation output
}
}
}
}
}
consol_sheet.getRange(2,1,x,10).setValues(final_values);
}
这个论坛对帮助我达到这一点非常有帮助,现在我在这里还有一个障碍可以完成这个项目。
答案 0 :(得分:3)
get()
的参数应该是一个数组数组(二维数组),其中所有内部数组都具有相同数量的元素,并且这些元素应该是字符串,数字或Date对象,不能为空元素。
注意:
如果您的数组看起来像这样
setValues
将缺少的内部数组和[
[1,,'orange'], // 2nd element of this inner array is empty
, // 2nd element of the outer array is empty
[] // This array is empty
]
添加到内部数组的每个“空点”上。结果数组应如下所示:
''
(在每个空元素位置添加一个空字符串[
[1,'','orange'],
['','',''],
['','','']
]
)。
相关
答案 1 :(得分:0)
将行和列写入电子表格
这是一个简单的函数,可以将行和列写到电子表格中。
import React from 'react';
import './ImgSlider.scss';
import PropTypes from "prop-types";
import Img1 from "../../../assets/img/ImgSlider/adult-blur-church-1309052.png"
import Img2 from "../../../assets/img/ImgSlider/adult-cellphone-cheerful-1530313.png"
import Img3 from "../../../assets/img/ImgSlider/adult-commerce-cook-375889.png"
import Img4 from "../../../assets/img/ImgSlider/aisle-arches-architecture-2090830.png"
import PrArrow from "../../../assets/img/ImgSlider/Rectangle 3.153 (1).png"
import NtArrow from "../../../assets/img/ImgSlider/Rectangle 3.153.png"
class ImgSlider extends React.Component {
constructor(props) {
super(props)
this.state = {
images: [
`${Img1}`,
`${Img2}`,
`${Img3}`,
`${Img4}`
],
currentIndex: 0,
translateValue: 0
}
}
goToPrevSlide = () => {
if(this.state.currentIndex === 0)
return;
this.setState(prevState => ({
currentIndex: prevState.currentIndex -1,
translateValue: prevState.translateValue + this.slideWidth()
}))
}
goToNextSlide = () => {
if(this.state.currentIndex === this.state.images.length -1) {
return this.setState({
currentIndex:0,
translateValue: 0
})
}
this.setState(prevState => ({
currentIndex: prevState.currentIndex +1,
translateValue: prevState.translateValue + - (this.slideWidth())
}));
}
slideWidth = () => {
return document.querySelector('.slide').clientWidth
};
render() {
return(
<div className="ImgSlider_Container">
<div className="ImgSlider_Container_Wrapper"
style={{
transform: `translateX(${this.state.translateValue}px)`,
transition: 'transform ease-out 0.45s'
}}>
{
this.state.images.map((image, imageIndex) => (
<Slide key={imageIndex} image={image}/>
))
}
</div>
<LeftArrow
goToPrevSlide={this.goToPrevSlide}
/>
<RightArrow
goToNextSlide={this.goToNextSlide}
/>
</div>
);
}
}
const Slide = ({ image }) => {
const styles = {
backgroundImage: `url(${image})`,
backgroundSize: 'cover',
backgroundRepeat: 'no-repeat',
backgroundPosition: '50% 60%'
}
return <div className="slide" style={styles}></div>
}
const LeftArrow =(props) => {
return (
<div className="backArrow arrow" onClick={props.goToPrevSlide}>
<img className="la-icon" src={PrArrow} />
</div>
);
}
const RightArrow = (props) => {
return (
<div className="nextArrow arrow" onClick={props.goToNextSlide}>
<img className="ra-icon" src={NtArrow} />
</div>
);
}
export default ImgSlider;
答案 2 :(得分:0)
您是否考虑过对您提取的原始2d数组consol_values进行修改?这样,您将知道您拥有期望数量的相同元素。您可以在0/1之外的其他地方开始循环,具体取决于您要忽略原始文件中的哪些值(在这种情况下,您的提取区域与您的写入区域并不完全相同)。