C# winform 导入导出EXCEL的问题,求各位高手帮帮忙谢谢

Bill_YING 2013-09-14 11:06:47
用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();
...全文
310 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bill_YING 2013-09-25
  • 打赏
  • 举报
回复
问题已解决是路径问题,获取一下工程文件目录就好了。string path = Application.StartupPath;
本拉灯 2013-09-15
  • 打赏
  • 举报
回复
明摆着呀,驱动问题
人生导师 2013-09-15
  • 打赏
  • 举报
回复
Office 的版本是多少的呢? 使用Ado.NET技术访问Excel的时候经常会出现数据驱动不正确的情况的
Andy__Huang 2013-09-15
  • 打赏
  • 举报
回复
估计是版本问题,XP相对于office2010版本来说,版本太高了,不知道数据库引警是否支持,是个问题?office2010是64位,而xp是32位,可能打开不支持到64位
Bill_YING 2013-09-15
  • 打赏
  • 举报
回复
好像是在XP系统下无法识别相对路径,我给了一个绝对路径就能正常操作。
Bill_YING 2013-09-14
  • 打赏
  • 举报
回复
其实就是为什么再将excel中的数据添加到datagridview中之后我在调用插入语句时提示打不开数据库文件
Bill_YING 2013-09-14
  • 打赏
  • 举报
回复
自己顶一下,等待高手!!!
Bill_YING 2013-09-14
  • 打赏
  • 举报
回复
4.0也不行我试过了而且4.0还有office版本的问题。但是导出操作没有用到这个啊为什么导出后也提示同样的问题“无法打开数据库文件”
niss 2013-09-14
  • 打赏
  • 举报
回复
引用 楼主 Bill_YING 的回复:
用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();
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'"; 这里有问题,是看看winxp有没有所谓的OLEDB.12.0,应该只有一个4.0

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧