joaomago Posted July 19, 2013 at 09:14 AM Report #519319 Posted July 19, 2013 at 09:14 AM (edited) Boas pessoal, estou com um problema a exportar dados de uma listview para o excel. É o seguinte, consigo exportar quase tudo, mas quando chega a uma das ultimas colunas dá erro e não consigo exportar o resto. Já fiz testes e se terminar o for antes de chegar a essa coluna o programa exporta tudo corretamente. O código é o seguinte: public static void ExportToExcel(ListView lv, string prmBookName, string prmPath) { try { if (lv.Items.Count == 0) { MessageBox.Show("No items to export", "System Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } string[] st = new string[lv.Columns.Count]; DirectoryInfo di = new DirectoryInfo(prmPath); if (di.Exists == false) di.Create(); StreamWriter sw = new StreamWriter(prmPath + prmBookName + ".xls", false); sw.AutoFlush = true; for (int col = 0; col < lv.Columns.Count; col++) { sw.Write("\t" + lv.Columns[col].Text.ToString()); } int rowIndex = 1; int row = 0; string st1 = ""; for (row = 0; row < lv.Items.Count; row++) { if (rowIndex <= lv.Items.Count) rowIndex++; if (row == 0) st1 = "\n"; else st1 = ""; for (int col = 0; col < lv.Columns.Count; col++) { st1 = st1 + "\t" + "" + lv.Items[row].SubItems[col].Text.ToString(); } sw.WriteLine(st1); } sw.Close(); FileInfo fil = new FileInfo(prmPath + prmBookName + ".xls"); if (fil.Exists == true) MessageBox.Show("Finished!\n" + "File Name: " + prmPath + prmBookName, "Export to Excel", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show(ex.Message); } } Alguém sabe onde pode estar o problema? Edited July 19, 2013 at 01:44 PM by joaomago
bioshock Posted July 19, 2013 at 10:03 AM Report #519329 Posted July 19, 2013 at 10:03 AM Que erro dá..?
joaomago Posted July 19, 2013 at 10:06 AM Author Report #519331 Posted July 19, 2013 at 10:06 AM O erro é este: https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-frc1/1005624_10200844196320159_1755560376_n.jpg
bioshock Posted July 19, 2013 at 12:05 PM Report #519350 Posted July 19, 2013 at 12:05 PM Então é normal. Significa que não há uma 13º coluna na Listview. Deixo uma dica: em programação, o número '0' é levado muito a sério..sendo que o índice de qualquer array começa em '0'.
joaomago Posted July 19, 2013 at 01:42 PM Author Report #519356 Posted July 19, 2013 at 01:42 PM Lá está, o problema é que a Listview tem 15 colunas
bioshock Posted July 19, 2013 at 03:25 PM Report #519382 Posted July 19, 2013 at 03:25 PM (edited) Estive a replicar o teu problema, e isso acontece porque não tens conteúdo na célula onde te dá erro. Edit: Quando digo que 'não tens conteúdo', significa que não tens um Subitem na X linha, na Y coluna. Resumindo, 10 colunas equivale a: 1 ListviewItem 9 ListviewSubItem Edited July 19, 2013 at 03:29 PM by bioshock
joaomago Posted July 22, 2013 at 03:13 PM Author Report #519563 Posted July 22, 2013 at 03:13 PM Sim bioshock, eu percebo o que me estás a dizer e tens toda a razão, mas não é esse o problema na minha aplicação. Eu tenho 15 colunas, ou seja: 1 ListviewItem 14 ListviewSubItem logo é impossível dizer-me que não tenho conteudo na posição 13 e 14 ..
bioshock Posted July 22, 2013 at 05:19 PM Report #519577 Posted July 22, 2013 at 05:19 PM Já experimentaste fazer step-debug? Também podes verificar os valores via código. foreach (ListViewItem itemRow in this.listView1.Items) { for (int i = 0; i < itemRow.SubItems.Count; i++) { MessageBox.Show("Coluna: " + i.ToString() + Environment.NewLine + "Linha: " + itemRow.Index.ToString() + Environment.NewLine + "Valor: " + itemRow.SubItems[i].Text); } }
joaomago Posted July 23, 2013 at 02:28 PM Author Report #519670 Posted July 23, 2013 at 02:28 PM (edited) Sim já fiz e dá-me o tal erro que o valor é inválido, quando a listView.Count é igual a 15, e ainda estava no valor 13 ... Estive a verificar os valores e quando chega à coluna 12 passa automaticamente para a linha seguinte, não compreendo. Edited July 23, 2013 at 02:33 PM by joaomago
bioshock Posted July 23, 2013 at 02:53 PM Report #519673 Posted July 23, 2013 at 02:53 PM O que podes fazer é criar um projecto novo de teste, e tentas replicar o erro. E experimenta fazer aquilo que te disse no penúltimo post.
brunobola Posted September 5, 2013 at 11:33 PM Report #523576 Posted September 5, 2013 at 11:33 PM Verifica esta solução: http://www.daniweb.com/software-development/csharp/threads/192620/listview-to-excel Existem muitas mais, mas esta deve funcionar par ao que pretendes.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now