C# winform 导入导出EXCEL的问题,求各位高手帮帮忙谢谢
用VS2010在win7系统下做了一个小程序使用的是sqlite数据库,office用的是2010。
问题:
1.在win7 64位和32位下对excel文件能正常导入和导出,但是部署到XP系统下导入时会提示无法打开数据库,但是添加操作却是正常的(导入和添加调用的是一个方法)。
2.导出操作在win7也下能正常使用,部署到XP上之后我做增删改查都没有问题。当我点击导出按钮将数据导出到excel中之后(能正常导出) 再进行增删改查操作时就会提示无法打开数据库。估计和导入是同一个问题。
这是从datagridview导出到excel代码:
//导出到execl
try
{
//没有数据的话就不往下执行
if (dataGridView1.Rows.Count == 0)
return;
string saveFileName = "";
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.DefaultExt = "xlsx";
saveDialog.Filter = "Excel文件|*.xlsx";
saveDialog.FileName = "KNCVI";
saveDialog.ShowDialog();
saveFileName = saveDialog.FileName;
if (saveFileName.IndexOf(":") < 0) return; //被点了取消
//实例化一个Excel.Application对象
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbooks workbooks = excel.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
//让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写
//excel.Visible = false;
//生成Excel中列头名称
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;
}
//把DataGridView当前页的数据保存在Excel中
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
if (dataGridView1[j, i].ValueType == typeof(string))
{
excel.Cells[i + 2, j + 1] = "'" + dataGridView1[j, i].Value.ToString();
}
else
{
excel.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();
}
}
}
workbook.Saved = true;
workbook.SaveCopyAs(saveFileName);
excel.Quit();
GC.Collect();
KillProcess("EXCEL");
MessageBox.Show("导出成功", "提示");
}
catch (Exception ex)
{
KillProcess("EXCEL");
MessageBox.Show(ex.Message, "错误提示");
}
这是将excel导入到datagridview中的代码:
string strConn;
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strConn);
Conn.Open();
System.Data.DataTable sTable = Conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
string tableName = sTable.Rows[0][2].ToString().Trim();
System.Data.DataTable dt = new System.Data.DataTable();
OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + tableName + "]", strConn);
try
{
oada.Fill(dt);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
Conn.Close();