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