Я (очевидно) новичок в концепции WinForms, а также SQL et c. Я пишу программу, которая работает как примитивный бюджетный помощник. У меня есть DataGridView, где я создал таблицу, поэтому я хочу, чтобы пользователь внес свои изменения и смог вернуться к ним при следующем запуске приложения. Я на самом деле не хочу использовать базы данных на этом этапе, и решил заставить мое приложение сохранять данные в файл Excel. Это сохраняет его, но я не понимаю, как открыть файл, чтобы снова заполнить DataGridView. Я попробовал этот подход Импорт Excel в Datagridview , но я получаю System.InvalidOperationException (Microsoft.ACE.OLEDB.12.0 не зарегистрирован на локальной машине - или что-то в этом роде). Я гуглил почти все решения, но безрезультатно. Я продолжаю получать исключения в функции, которая должна открывать файл Excel.
private void ToCsV(DataGridView dGV, string filename)
{
string stOutput = "";
// Export titles:
string sHeaders = "";
for (int j = 0; j < dGV.Columns.Count; j++)
sHeaders = sHeaders.ToString() + Convert.ToString(dGV.Columns[j].HeaderText) + "\t";
stOutput += sHeaders + "\r\n";
// Export data.
for (int i = 0; i < dGV.RowCount - 1; i++)
{
string stLine = "";
for (int j = 0; j < dGV.Rows[i].Cells.Count; j++)
stLine = stLine.ToString() + Convert.ToString(dGV.Rows[i].Cells[j].Value) + "\t";
stOutput += stLine + "\r\n";
}
Encoding utf16 = Encoding.GetEncoding(1254);
byte[] output = utf16.GetBytes(stOutput);
FileStream fs = new FileStream(filename, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(output, 0, output.Length); //write the encoded file
bw.Flush();
bw.Close();
fs.Close();
}
//button for saving
private void savexmlToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Excel Documents (*.xls)|*.xls";
sfd.FileName = "export.xls";
if (sfd.ShowDialog() == DialogResult.OK)
{
//ToCsV(dataGridView1, @"c:\export.xls");
ToCsV(DtgTable, sfd.FileName);
}
}
.... и вот функция открытия:
private void OpenxmlToolStripMenuItem_Click_1(object sender, EventArgs e)
{
String name = "Items";
String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
"C:\\Sample.xlsx" +
";Extended Properties='Excel 12.0 XML;HDR=YES;';";
OleDbConnection con = new OleDbConnection(constr);
OleDbCommand oconn = new OleDbCommand("Select * From [" + name + "$]", con);
con.Open();
OleDbDataAdapter sda = new OleDbDataAdapter(oconn);
DataTable data = new DataTable();
sda.Fill(data);
DtgTable.DataSource = data;
}
Видимо, это то, что вызывает исключение появляться после того, как я пытаюсь открыть файл xls "con.Open ();"