我想编辑一个宏,以便按日期将数据从1到另一个工作表?

我正在尝试编辑一个宏,该宏将子表IOSRef,AndroidRef,WebRef,BetaRe的数据复制到主表(均属于单个工作表)。但是我希望它首先匹配日期,并相应地复制数据。


我尝试创建主工作表的日期数组,并将其与子工作表中的7天日期范围匹配,然后将其放入循环中。从而创建了4个这样的循环,这些循环在代码中可见。 该脚本可以正常运行,但不执行任何操作。


public class RepairListAdapter extends ArrayAdapter<Repair> {

    private Context mContext;
    private int mResource;
    private int lastPosition = -1;

    private static class ViewHolder {
        TextView workIdTV;
        TextView workerusernameTV;
        TextView workOrderTV;
        TextView dateOfDamageTV;
        TextView damageSpottedByTV;
        TextView finishDateTV;
        TextView finishedByTV;
        TextView priotityTV;
        Spinner statussp;
    }

    public RepairListAdapter(Context context,int resource,ArrayList<Repair> objects) {
        super(context,resource,objects);
        mContext = context;
        mResource = resource;
    }

    @RequiresApi(api = Build.VERSION_CODES.N)
    @NonNull
    @Override
    public View getView(int position,View convertView,ViewGroup parent) {
        //get the repairOrder information
        int workId = getItem(position).getWorkId();
        String workerusername = getItem(position).getWorkerusername();
        String workOrder = getItem(position).getWorkOrder();
        String dateOfDamage = getItem(position).getDateOfDamage();
        String damageSpottedBy = getItem(position).getDamageSpottedBy();
        String finishDate = getItem(position).getFinishDate();
        String finishedBy = getItem(position).getFinishedBy();
        String priority = getItem(position).getPriority();
        String status = getItem(position).getStatus();

        //create the view result for showing the animation
        final View result;

        //ViewHolder object
        ViewHolder holder;


        if (convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(mContext);
            convertView = inflater.inflate(mResource,parent,false);
            holder = new ViewHolder();
            holder.workIdTV = (TextView) convertView.findViewById(R.id.workIdTextView);
            holder.workerusernameTV = (TextView) convertView.findViewById(R.id.workerusernameTextView);
            holder.workOrderTV = (TextView) convertView.findViewById(R.id.workOrderTextView);
            holder.dateOfDamageTV = (TextView) convertView.findViewById(R.id.dateOfDamageTextView);
            holder.damageSpottedByTV = (TextView) convertView.findViewById(R.id.damageSpottedByTextView);
            holder.finishDateTV = (TextView) convertView.findViewById(R.id.finishDateTextView);
            holder.finishedByTV = (TextView) convertView.findViewById(R.id.finishedByTextView);
            holder.priotityTV = (TextView) convertView.findViewById(R.id.priorityTextView);
            holder.statussp = (Spinner) convertView.findViewById(R.id.statusspinner);

            result = convertView;

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
            result = convertView;

        }

        //set on click listener for each cell

        convertView.findViewById(R.id.workIdTextView).setOnClicklistener(new View.OnClicklistener() {
            @Override
            public void onClick(View v) {
                ((ListView) parent).performItemClick(v,position,0);
            }
        });

         //...on click for all cells,without the spinner cell


        //animation
        Animation animation = AnimationUtils.loadAnimation(mContext,(position > lastPosition) ? R.anim.load_down_anim : R.anim.load_up_anim);
        result.startAnimation(animation);
        lastPosition = position;

        //set String objects to text
        holder.workIdTV.setText(String.valueOf(workId));
        holder.workerusernameTV.setText(workerusername);
        holder.workOrderTV.setText(workOrder);
        holder.dateOfDamageTV.setText(dateOfDamage);
        holder.damageSpottedByTV.setText(damageSpottedBy);
        holder.finishDateTV.setText(finishDate);
        holder.finishedByTV.setText(finishedBy);
        holder.priotityTV.setText(priority);

        //spinner adapter
        ArrayAdapter<String> myAdapter = new ArrayAdapter<>(mContext,android.R.layout.simple_list_item_1,//get arrayList 
        dbManagerRepairState.getNextPossibleState(status));
        myAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        holder.statussp.setadapter(myAdapter);
        holder.statussp.setSelection(0);
        holder.statussp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parentView,View selectedItemView,int position,long id) {
                holder.statussp.setSelection(position);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parentView) {
                // your code here
            }
        });
        return convertView;
    }
}
shaojiaying 回答:我想编辑一个宏,以便按日期将数据从1到另一个工作表?

在这一行:var data=spreadsheet.getActiveSheet().getRange(2,1,321);

没有data.length,因为它返回一个范围。

也许您希望在末尾添加.getValues()

但是,即使那样data.length总是会变成1,那么您真的要使用for循环吗?

在这一行:spreadsheet.setCurrentCell(data[i][nn]);

您正在使用我们的示例中未定义的索引i,因此它不是minimum reproducible example,因为没有为我们定义i,因此我们无济于事

也请考虑以下代码:

spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Consolidated'),true); var data=spreadsheet.getActiveSheet().getRange(2,321);

宏记录器会跟踪您的动作,因此当您移动到另一张纸并获取数据时,它会记录您的所有动作。但是在脚本中,您无需移至另一张纸。因此,上述脚本行可以简单地写为:

var data=spreadsheet.getSheetByName('Consolidated').getRange(2,321);因此避免了不需要激活的所有激活工作表的额外代码。

本文链接:https://www.f2er.com/3145520.html

大家都在问