Excel não está recalculando corretamente os valores

2

Eu tenho uma planilha do Excel com valores (esta planilha é gerada por um script perl customizado, mas eu não acho que é onde está o problema). Nele, eu tenho uma fórmula:

=sum(indirect(concatenate(address(6,column()),":",address(17,column()))))

O objetivo desta fórmula é me fornecer o SUM() das células na coluna atual, entre as linhas 6 e 17. Em Planilha Gnumeric , assim que eu abro o arquivo, isso funciona. Mas no Excel (tanto em 2003 como em 2007), abrir o arquivo dá #VALUE! erros nos campos com essa fórmula, informando que a chamada INDIRECT com os valores $B$6:$B$17 resultará em erro .

Aqui está o problema do problema. Se eu editar o campo (via F2 ), e fizer no alterações, e apertar enter, os valores serão atualizados. Além disso, parece que, se eu salvar o arquivo como .xlsx (formato Excel 2007), os valores serão atualizados na abertura. Infelizmente, não tenho certeza de que criar um xlsx é uma possibilidade com os módulos que estou usando, e muitos de nossos clientes provavelmente não seriam capazes de usá-lo de qualquer maneira.

Alguma sugestão? A edição de mais de 200 arquivos todos os meses para cada cliente não será viável, por isso, se houver algo que esteja em falta, informe-nos.

    
por Glen Solsberry 03.02.2011 / 15:45

5 respostas

3

Se você inserir uma função Sum de baunilha, isso funcionará - ou seja, o problema pode ser rastreado para um componente da combinação indireta / endereço?

Você já tentou usar o OFFSET para criar o intervalo a ser somado? Por exemplo:

=SUM(OFFSET(B6,0,0,12,1))
    
por 25.02.2011 / 21:00
2

Pode estar a aguentar-se, mas pode experimentar a referência ao estilo R1C1

=SUM(INDIRECT("R["&7-ROW()&"]C:R["&17-ROW()&"]C",FALSE))

Ou se as fórmulas estiverem sempre na linha 19, defina o estilo de referência como R1C1

Application.ReferenceStyle = xlR1C1

Depois, você pode inserir a fórmula como

=SUM(R[-13]C:R[-2]C)

Atualização:

você pode evitar a necessidade de definir o ReferenceStyle usando

<YourCellReference>.FormulaR1C1 = "=SUM(R[-13]C:R[-2]C)"
    
por 25.02.2011 / 15:10
1

Talvez você possa forçar um recálculo de toda a planilha com isso:

link

Uma renomeação de macro e renomear a planilha deve funcionar bem. Talvez você possa executar no final do pearlscript? Eu realmente não sei muito sobre pérola, desculpe.

Ou use a tecla de atalho CTRL + ALT + F9 e, se funcionar, use o VBA com esta função: Application.CalculateFull

    
por 24.02.2011 / 23:39
1

Se você estiver usando o WriteExcel para o seu script perl, observe isso, com uma sugestão no artigo. parsing INDIRECT & Funções do CONCATENATO e Erro de fórmula misturando SUM () e INDIRECT ( )

Unfortunately the Spreadsheet::WriteExcel parser cannot handle formulas like that. Spreadsheet::WriteExcelXML can handle them though if you can use that.

    
por 27.02.2011 / 01:42
0

Em Tools | Calculations do Excel, você pode definir o modo de cálculo. Se for definido como "Automático", o Excel deverá atualizar os resultados das fórmulas de todos os campos automaticamente, também ao abrir o arquivo.

A configuração de cálculo também pode ser definida por planilhas individuais, então talvez seja possível que o script Perl defina o modo de atualização manual.

    
por 03.02.2011 / 16:54