Передача в ListBox списка имен листов Excel - C#

Узнай цену своей работы

Формулировка задачи:

Здрасте. Подскажите, как вывести список имен листов Excel файла в ListBox, с дальнейшим выводом в DataGridView листа выбранного в ListBox.
Листинг программы
  1. namespace Privacy_assistant
  2. {
  3. public partial class Form1 : Form
  4. {
  5. private Reviewform rf = new Reviewform();
  6. public Form1()
  7. {
  8. InitializeComponent();
  9. }
  10.  
  11. private void просмотраToolStripMenuItem_Click(object sender, EventArgs e)
  12. {
  13. OpenFileDialog ofd = new OpenFileDialog();
  14. ofd.DefaultExt = "*.xls;*.xlsx";
  15. ofd.Filter = "Execel 2003(*.xls)|*.xls|Excel 2007(*.xlsx)|*.xlsx";
  16. ofd.Title = "Выберите файл для просмотра";
  17. if(ofd.ShowDialog()==System.Windows.Forms.DialogResult.OK)
  18. {
  19. CallEvent.callbackEventHandler(ofd.FileName);
  20. rf.ShowDialog();
  21. }
  22. else
  23. {
  24. MessageBox.Show("Не выбран файл для просмотра",
  25. "Загрузка данных...", MessageBoxButtons.OK,MessageBoxIcon.Error);
  26. }
  27. }
  28. }
  29. }
Листинг программы
  1. namespace Privacy_assistant
  2. {
  3. public partial class Reviewform : Form
  4. {
  5. public Reviewform()
  6. {
  7. CallEvent.callbackEventHandler = new CallEvent.callbackEvent(this.Reload);
  8. InitializeComponent();
  9. listname();
  10. }
  11. void Reload(string param)
  12. {
  13. this.label1.Text = param;
  14. String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + param +";Extended Properties='Excel 12.0 XML;HDR=YES;';";
  15. System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(constr);
  16. conn.Open();
  17. DataSet ds = new DataSet();
  18. DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
  19. //изменяя значение Rows[0] можно выбрать какой лист загрузить в dataGridView1, но тут я тоже не придумал как это //использовать
  20. string sheet = (string)schemaTable.Rows[0].ItemArray[2];
  21. string select = String.Format("Select * from [{0}]", sheet);
  22. System.Data.OleDb.OleDbDataAdapter ad = new System.Data.OleDb.OleDbDataAdapter(select, conn);
  23. ad.Fill(ds);
  24. DataTable tb = ds.Tables[0];
  25. conn.Close();
  26. dataGridView1.DataSource = tb;
  27. conn.Close();
  28. }
  29. //Весь код ниже был скопирован и по идее возвращает список имен листов, но я не осилил вывести его в ListBox
  30. private String[] listname ()
  31. {
  32. OleDbConnection Conn = null;
  33. System.Data.DataTable schemaTable = null;
  34. try
  35. {
  36. //В label1.Text по идее хранится путь к файлу
  37. String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + label1.Text + ";Extended Properties='Excel 12.0 XML;HDR=YES;';";
  38. Conn = new OleDbConnection(constr);
  39. Conn.Open();
  40. schemaTable = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
  41. if (schemaTable == null)
  42. {
  43. return null;
  44. }
  45. String[] excelSheets = new String[schemaTable.Rows.Count];
  46. int i = 0;
  47. foreach (DataRow row in schemaTable.Rows)
  48. {
  49. excelSheets[i] = row["TABLE_NAME"].ToString();
  50. i++;
  51. }
  52. listBox1.Text = excelSheets.ToString();
  53. return excelSheets;
  54. }
  55. catch (Exception ex)
  56. {
  57. return null;
  58. }
  59. finally
  60. {
  61. if (Conn != null)
  62. {
  63. Conn.Close();
  64. Conn.Dispose();
  65. }
  66. if (schemaTable != null)
  67. {
  68. schemaTable.Dispose();
  69. }
  70. }
  71. }
  72. }
В общем буду благодарен если кто разберется в моей писанине и поможет решить эту проблему.

Решение задачи: «Передача в ListBox списка имен листов Excel»

textual
Листинг программы
  1. using Excel = Microsoft.Office.Interop.Excel;
  2.  
  3.         private Excel.Application excelapp;
  4.  
  5.         private void button1_Click(object sender, EventArgs e)
  6.         {
  7.             excelapp = new Excel.Application();
  8.             excelapp.Visible = true;
  9.             excelapp.SheetsInNewWorkbook = 3;
  10.             excelapp.Workbooks.Add(Type.Missing);
  11.             int cnt = excelapp.Sheets.Count;
  12.             for (int i = 1; i <= cnt; i++)
  13.                 listBox1.Items.Add(excelapp.Sheets[i].Name);
  14.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы