Передача в 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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д