def write_formula row, idx
xf_idx = @workbook.xf_index @worksheet.workbook, row.format(idx)
cell = row[idx]
data1 = [
row.idx,
idx,
xf_idx,
].pack 'v3'
data2 = nil
case value = cell.value
when Numeric
data2 = [value].pack EIGHT_BYTE_DOUBLE
when String
data2 = [
0x00,
0xffff,
].pack 'Cx5v'
when true, false
value = value ? 1 : 0
data2 = [
0x01,
value,
0xffff,
].pack 'CxCx3v'
when Error
data2 = [
0x02,
value.code,
0xffff,
].pack 'CxCx3v'
when nil
data2 = [
0x03,
0xffff,
].pack 'Cx5v'
else
data2 = [
0x02,
0x2a,
0xffff,
].pack 'CxCx3v'
end
opts = 0x03
opts |= 0x08 if cell.shared
data3 = [
opts
].pack 'vx4'
write_op opcode(:formula), data1, data2, data3, cell.data
if cell.value.is_a?(String)
write_op opcode(:string), unicode_string(cell.value, 2)
end
end