Передача в 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);
        }

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


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

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

6   голосов , оценка 3.833 из 5
Похожие ответы