Carlos Gonçalves: Bem Vindo à Web 2.0! Este blog é direccionado a todos os níveis de web designers e programadores. Todos os assuntos serão discutidos, incluindo CSS, Javascript, Java, PHP, entre outros!

Ler Folha Excel com PHP

Ontem no fórum Webtuga e no Portugal-a-Programar colocaram-me a mesma questão por duas vezes.
Como ler Folhas Excel utilizando PHP.

A resposta não é tão óbvia quanto parece, e é um pouco complexa.
Ao contrário daqui: Ler PDF e Documentos Word com PHP, esta resposta vai um pouco mais além, pois temos que manusear as colunas e células da folha do excel.
Passo então a explicar como manusear a leitura de folhas excel com PHP.

Ler Folha Excel (.xls)

Para que seja possível a leitura do ficheiro excel, primeiramente precisas de instalar a classe phpExcelReader.
Uma vez na posse da classe, executamos a seguinte instrução PHP para ler a folha excel:

require_once 'Excel/reader.php';

$reader = new Spreadsheet_Excel_Reader();
$reader->setOutputEncoding("UTF-8");

$reader->read("test.xls");

for ($i = 1; $i < = $reader->sheets[0]["numRows"]; $i++)
{
	for ($j = 1; $j < = $reader->sheets[0]["numCols"]; $j++)
	{
		print "\"".$reader->sheets[0]["cells"][$i][$j]."\",";
	}
	echo "\n";
}

Alguma dúvida, coloquem.


Muito FracoFracoRazoávelBomMuito Bom (1 votos, média: 5,00 num total de 5)
Loading ... Loading ...

Dicas para melhorar os URLs das Páginas

Os URL’s das páginas têm bem mais importância, do que a maioria das pessoas pensam. Ninguém quer “enfrentar maratonas” de URLs e muito menos com querystrings. Hoje, vou tentar dar algumas dicas para melhorar as URL’s.

Dicas

Dicas

Deixar de lado o “WWW

Os quatro mais inúteis caracteres de uma URL são sempre o “www.”.
Se quiseres optar pela maneira mais fácil de encurtar os URLs, retira o WWW. Claro que precisas de configurar o servidor para que ele veja “WWW” e não -WWW da mesma forma. Por diversas vezes, vejo “www.” em anúncios nos jornais – é um desperdício de espaço e dinheiro, pois como provavelmente devem saber, os anúncios nos jornais, são pagos por caracter!

Retira a extensão dos ficheiros

Com ficheiros .htaccess e mod_rewrite, a extensão dos ficheiros nas URL’s passam a ser coisas do passado.
Porquê fazer os utilizadores recordarem-se de “pagina.php” se eles podem simplesmente lembrar-se de “pagina”?

Utiliza SEF Links

Se pretendes ou tens expectativas que muitas pessoas “linkem” a(s) tua(s) página(s), faz-lhes o favor e ao gerar URL’s amigáveis (SEF).
Ninguém se vai lembrar de “cgoncalves.com/post.php=id=3249″.

Não coloques os ficheiros dentro de muitas Directorias

Bem, provavelmente deves de o fazer, por uma questão de organização, mas pelo menos utiliza o mod_rewrite para criar “atalhos” nas URL’s. Ninguém gosta de de “bla bla Slash bla bla Slash .” Slash é para Guns and Roses, não para links amigáveis.

Não sigas a Moda, Usa domínios “Inteligentes” para a Web 2.0


Domínios como “script.aculo.us” e “del.icio.us” inicialmente são memorizáveis, mas agora são enjoativos e difíceis de memorizar. Não obrigues os teus utilizadores a adivinharem o “.” (dot) se coloca!



Alguma sugestão? Partilha-a!


Muito FracoFracoRazoávelBomMuito Bom (1 votos, média: 4,00 num total de 5)
Loading ... Loading ...

Regras Validação Contribuinte (NIF) ASP + JavaScript

É normal, diversos sites terem requisitos de introdução do Número de Contribuinte.
Mas o que nem toda a gente sabe, é como se procede à sua validação.
Em um dos trabalhos que já efectuei, tive de pesquisar sobre isso, entrei em contacto com o IIES o qual me facultou o algoritmo para a sua verificação. Podes consultar aqui a descrição do algoritmo em PDF.

A regra geral da validação é:

  1. O NIF tem que ter 9 dígitos
  2. O primeiro dígito tem que ser 1, 2, 5, 6, 8 ou 9
  3. A soma de controle dada por 9xd1+8xd2+7xd3+6xd4+5xd5+4xd6+3xd7+2xd8+d9 tem que ser múltipla de 11 (congruente com o módulo 11, isto é, dê resto 0 quando dividida por 11). d1 é o dígito mais à esquerda, e d9 o digito mais à direita (digito de controle).
  4. d9, em alguns casos, precisava de ter o valor 10, para que a soma de controle fosse divisível por 11. Neste caso d9 tomará o valor 0. Nitidamente uma decisão mal tomada, pois um dígito de controle igual a zero, poderá significar uma soma de controle correcta ou uma cujo resto da divisão por onze dá 1. O dígito de controle deveria ser, por exemplo, uma letra com os 11 possíveis valores de A a K. Por curiosidade, o mesmo erro, existe na validação dos BI.

Agora o código em ASP:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Validação do NIF</title>

    <script src="valida.js" type="text/javascript"></script>

</head>
<body>
<form id="form1" runat="server">
<div>
        <asp :Label ID="Label1" runat="server" Text="Nº de Contribuinte:"></asp>
        <asp :TextBox ID="txtNIF" runat="server"></asp>
        <asp :RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtNIF"
            Display="Dynamic" ErrorMessage="Tem de preencher o nº de Contribuinte." ValidationGroup="NIF"
            Enabled="False">*</asp>
        <asp :CustomValidator ID="CustomValidator1" runat="server" ClientValidationFunction="ValidateNIF"
            ControlToValidate="txtNIF" Display="Dynamic" ErrorMessage="Número de Contribuinte Inválido."
            ValidationGroup="NIF">*</asp>
    </div>

    <asp :Button ID="Button1" runat="server" Text="Enviar" ValidationGroup="NIF" />

    <asp :ValidationSummary ID="ValidationSummary1" runat="server" ValidationGroup="NIF" />
    </form>

</body>
</html>

Agora com recurso ao JavaScript, validamos o NIF:

function ValidateNIF(sender, args)
{
    args.IsValid = IsValidNIF(args.Value);
}

function IsValidNIF(nif)
{
    var c;
    var checkDigit = 0;

    //Verifica se é nulo, se é numérico e se tem 9 dígitos
    if(nif != null && IsNumeric(nif) && nif.length == 9)
    {
        //Obtem o primeiro número do NIF
        c = nif.charAt(0);

        //Verifica se o primeiro número é (1, 2, 5, 6, 8 ou 9)
        if(c == '1' || c == '2' || c == '5' || c == '6' || c == '8' || c == '9')
        {
            //Calculo do Digito de Controle
            checkDigit = c * 9;
            var i = 0;
            for(i = 2; i < = 8; i++)
            {
                checkDigit += nif.charAt(i-1) * (10-i);
            }
            checkDigit = 11 - (checkDigit % 11);

            //Se o digito de controle é maior que dez, coloca-o a zero
            if(checkDigit >= 10)
                checkDigit = 0;

            //Compara o digito de controle com o último numero do NIF
            //Se igual, o NIF é válido.
            if(checkDigit == nif.charAt(8))
                return true;
        }
    }
    return false;
}

function IsNumeric(ObjVal)
{
return /^\d+$/.test(ObjVal);
}

Muito FracoFracoRazoávelBomMuito Bom (3 votos, média: 5,00 num total de 5)
Loading ... Loading ...