setFormula语句产生解析错误

时间:2019-07-05 11:20:44

标签: google-apps-script

我一直在尝试对继承的电子表格进行一些更改,但是对于正在苦苦挣扎的Google脚本还是陌生的。我试图在一个单元格中设置一个公式,并且我添加了其他行似乎很好用,但是我对此感到茫然。

我设法使以下内容起作用,但不希望绝对引用。

   at System.Windows.Forms.DataGridView.InvalidateCell(Int32 columnIndex, Int32 rowIndex)
   at System.Windows.Forms.DataGridView.DataGridViewDataConnection.ProcessListChanged(ListChangedEventArgs e)
   at System.Windows.Forms.DataGridView.DataGridViewDataConnection.currencyManager_ListChanged(Object sender, ListChangedEventArgs e)
   at System.ComponentModel.ListChangedEventHandler.Invoke(Object sender, ListChangedEventArgs e)
   at System.Windows.Forms.CurrencyManager.OnListChanged(ListChangedEventArgs e)
   at System.Windows.Forms.CurrencyManager.CancelCurrentEdit()
   at System.Windows.Forms.DataGridView.DataGridViewDataConnection.CancelRowEdit(Boolean restoreRow, Boolean addNewFinished)
   at System.Windows.Forms.DataGridView.DataGridViewDataConnection.ProcessException(Exception exception, DataGridViewCellCancelEventArgs e, Boolean beginEdit)
   at System.Windows.Forms.DataGridView.DataGridViewDataConnection.PushValue(Int32 boundColumnIndex, Int32 columnIndex, Int32 rowIndex, Object value)
   at System.Windows.Forms.DataGridViewCell.SetValue(Int32 rowIndex, Object value)
   at System.Windows.Forms.DataGridView.PushFormattedValue(DataGridViewCell& dataGridViewCurrentCell, Object formattedValue, Exception& exception)
   at System.Windows.Forms.DataGridView.CommitEdit(DataGridViewCell& dataGridViewCurrentCell, DataGridViewDataErrorContexts context, DataGridViewValidateCellInternal validateCell, Boolean fireCellLeave, Boolean fireCellEnter, Boolean fireRowLeave, Boolean fireRowEnter, Boolean fireLeave)
   at System.Windows.Forms.DataGridView.CommitEdit(DataGridViewDataErrorContexts context, Boolean forCurrentCellChange, Boolean forCurrentRowChange)
   at System.Windows.Forms.DataGridView.OnCellMouseDown(HitTestInfo hti, Boolean isShiftDown, Boolean isControlDown)
   at System.Windows.Forms.DataGridView.OnCellMouseDown(DataGridViewCellMouseEventArgs e)
   at System.Windows.Forms.DataGridView.OnMouseDown(MouseEventArgs e)
   at System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.DataGridView.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.Run(Form mainForm)

下面的代码是我希望转到的代码,以使其更具动态性。

targetSheet.getRange(startRow + 1, 4, 1, 1).setFormula('=IF(C5 < G5, \"S\",IF(C5 > I5,\"VC\",\"C\"))');

但是,以上内容仅会产生公式解析错误。 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

使用R1C1表示法扩展表格时,如果要定位的单元格具有较大的行或列值,则不需要多余的+。您只需删除以下内容即可解决此问题:

var range = targetSheet.getRange(startRow + 2, 4, 1, 1);
range.setFormulaR1C1('=IF(R[0]C[-1] < R[0]C[3], "S", IF(R[0]C[-1] > R[0]C[5], "VC" , "C"))');

您还可以通过在setFormulaR1C1()中的整个公式周围使用单引号来避免指定反斜杠来转义多余的双引号。