Forum Pplware
[C#] Exportar para excel . . . - Versão de Impressão

+- Forum Pplware (http://forum.pplware.com)
+-- Fórum: Mais Tech (/forumdisplay.php?fid=11)
+--- Fórum: Programação e Web (/forumdisplay.php?fid=16)
+--- Tópico: [C#] Exportar para excel . . . (/showthread.php?tid=7997)



[C#] Exportar para excel . . . - MyPianoSucks - 13-12-2010 22:19

Olá a todos!

Já há algum tempo que não posto aqui mensagens no fórum, tenho andado a ler bastantes livros sobre programação (C++(aqui o melhor que consegui foi o jogo Snake ) /C#) e a escola não me permite passar muito tempo na programação infelizmente. Mas agora que já não se vai fazer nada na escola, vou aproveitar e recomeçar a todo o gás para aprender mais umas coisinhas novas xD.

Então é o seguinte. . .

Tenho um projecto com um timer e duas labels(vamos ignora-las, não são necessárias). Então o utilizador escreve os dados e carrega no botão exportar. Quando carrega abre uma folha do excel com os respectivos dados já inseridos. Mas o problema é outro. Tenho um timer que de 30 em 30 segundos adiciona 3 à variável final. O código que usei é o seguinte:
Código:
numero++;

            if (numero == 5)
            {
                numero = 0;
                final += 3;
            }
            
                label1.Text = final.ToString();

As variáveis declarei-as como globais. Depois disso então temos o tal botão exportar em que exporta os dados para o excel.
Código:
Código:
Microsoft.Office.Interop.Excel.Application xla = new Microsoft.Office.Interop.Excel.Application();
            Workbook wb = xla.Workbooks.Add(XlSheetType.xlWorksheet);
            Worksheet ws = (Worksheet)xla.ActiveSheet;
            
            
            xla.Visible = true;

            ws.Cells[1, 1] = "Primeiro";
            ws.Cells[1, 2] = "Último";

            ws.Cells[3, 1] = txtprimeiro.Text;
            ws.Cells[3, 2] = txtultimo.Text;
            ws.Cells[5, 1] = "Tempo:";
            ws.Cells[5, 2] = final;

            Range a1 = ws.Cells[5, 2];
            double rawValue = a1.Value;
                
            ws.Cells[5, 2] = rawValue + final;
            
                
            string activDir = @"C:";
            string newPath = System.IO.Path.Combine(activDir, "exemplo");
            System.IO.Directory.CreateDirectory(newPath);

            ws.SaveAs(@"C:\exemplo\teste");

Pronto aqui não há erros, mas não está a acontecer o que eu queria. Imaginemos que o utilizador carregava botão "Iniciar", o timer iniciava e então de 30 em 30s adicionava 3 a variável final. Quando o utilizador carregasse em exportar o valor de final iria aparecer na célula [5,2] do excel. Mas o que eu quero e que na próxima vez que o utilizador abra o programa isto não reinicie, mas continue com o valor da célula e adicione o novo valor da variável final. Não está a acontecer porque eu tenho ws.Cells[5, 2] = final; antes de ws.Cells[5, 2] = rawValue + final; , mas não sei como hei-de dar a volta a isto. Já tentei user if(File.Exists) mas dá-me um erro. Algo como "cannot convert null to 'double' because it's noon-nullable value" .
Alguma sugestão para resolver isto?
Obrigado Smile


RE: [C#] Exportar para excel . . . - Shogun - 27-12-2010 23:08

Declara o teu double como double?, ou seja:

double? a;
a = 1234;
MessageBox.Show(a.Value);

colocares o ? em frente ao tipo significa que é um nullable value. Os tipos nativos são value types e por isso não podem ter o valor nulo, apenas os reference types podem.

Para mais informações ve este link:

http://pontonetpt.org/blogs/luisabreu/archive/2005/06/20/P4932.aspx
http://pontonetpt.org/blogs/luisabreu/archive/2010/09/15/what-about-value-types.aspx
http://pontonetpt.org/blogs/luisabreu/archive/2010/09/14/still-on-types-reference-types.aspx