Передача в ListBox списка имен листов Excel - C#
Формулировка задачи:
Здрасте. Подскажите, как вывести список имен листов Excel файла в ListBox, с дальнейшим выводом в DataGridView листа выбранного в ListBox.
В общем буду благодарен если кто разберется в моей писанине и поможет решить эту проблему.
Листинг программы
- namespace Privacy_assistant
- {
- public partial class Form1 : Form
- {
- private Reviewform rf = new Reviewform();
- public Form1()
- {
- InitializeComponent();
- }
- private void просмотраToolStripMenuItem_Click(object sender, EventArgs e)
- {
- OpenFileDialog ofd = new OpenFileDialog();
- ofd.DefaultExt = "*.xls;*.xlsx";
- ofd.Filter = "Execel 2003(*.xls)|*.xls|Excel 2007(*.xlsx)|*.xlsx";
- ofd.Title = "Выберите файл для просмотра";
- if(ofd.ShowDialog()==System.Windows.Forms.DialogResult.OK)
- {
- CallEvent.callbackEventHandler(ofd.FileName);
- rf.ShowDialog();
- }
- else
- {
- MessageBox.Show("Не выбран файл для просмотра",
- "Загрузка данных...", MessageBoxButtons.OK,MessageBoxIcon.Error);
- }
- }
- }
- }
Листинг программы
- namespace Privacy_assistant
- {
- public partial class Reviewform : Form
- {
- public Reviewform()
- {
- CallEvent.callbackEventHandler = new CallEvent.callbackEvent(this.Reload);
- InitializeComponent();
- listname();
- }
- void Reload(string param)
- {
- this.label1.Text = param;
- String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + param +";Extended Properties='Excel 12.0 XML;HDR=YES;';";
- System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(constr);
- conn.Open();
- DataSet ds = new DataSet();
- DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
- //изменяя значение Rows[0] можно выбрать какой лист загрузить в dataGridView1, но тут я тоже не придумал как это //использовать
- string sheet = (string)schemaTable.Rows[0].ItemArray[2];
- string select = String.Format("Select * from [{0}]", sheet);
- System.Data.OleDb.OleDbDataAdapter ad = new System.Data.OleDb.OleDbDataAdapter(select, conn);
- ad.Fill(ds);
- DataTable tb = ds.Tables[0];
- conn.Close();
- dataGridView1.DataSource = tb;
- conn.Close();
- }
- //Весь код ниже был скопирован и по идее возвращает список имен листов, но я не осилил вывести его в ListBox
- private String[] listname ()
- {
- OleDbConnection Conn = null;
- System.Data.DataTable schemaTable = null;
- try
- {
- //В label1.Text по идее хранится путь к файлу
- String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + label1.Text + ";Extended Properties='Excel 12.0 XML;HDR=YES;';";
- Conn = new OleDbConnection(constr);
- Conn.Open();
- schemaTable = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
- if (schemaTable == null)
- {
- return null;
- }
- String[] excelSheets = new String[schemaTable.Rows.Count];
- int i = 0;
- foreach (DataRow row in schemaTable.Rows)
- {
- excelSheets[i] = row["TABLE_NAME"].ToString();
- i++;
- }
- listBox1.Text = excelSheets.ToString();
- return excelSheets;
- }
- catch (Exception ex)
- {
- return null;
- }
- finally
- {
- if (Conn != null)
- {
- Conn.Close();
- Conn.Dispose();
- }
- if (schemaTable != null)
- {
- schemaTable.Dispose();
- }
- }
- }
- }
Решение задачи: «Передача в ListBox списка имен листов Excel»
textual
Листинг программы
- using Excel = Microsoft.Office.Interop.Excel;
- private Excel.Application excelapp;
- private void button1_Click(object sender, EventArgs e)
- {
- excelapp = new Excel.Application();
- excelapp.Visible = true;
- excelapp.SheetsInNewWorkbook = 3;
- excelapp.Workbooks.Add(Type.Missing);
- int cnt = excelapp.Sheets.Count;
- for (int i = 1; i <= cnt; i++)
- listBox1.Items.Add(excelapp.Sheets[i].Name);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д