关于C#导入导出EXCEL表格的问题!
我用 这两个方法进行 c#的excel表格的 导入导出
为什么 我导出的文件 都导入不进来 报的错误是 格式不对
有没有办法 解决这个问题??
我的 导入导出代码如下:
public IList<AddressList> excelImport(String path) //导入方法
{
IList<AddressList> allist = new List<AddressList>();
// string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + path + ";" + "Extended Properties=Excel 8.0;";
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+path+";Extended Properties='Excel 8.0;HDR=NO'";
OleDbConnection conn = new OleDbConnection(strConn);
string strExcel = "";
strExcel = "select * from [sheet1$]";
OleDbCommand cmd = new OleDbCommand(strExcel, conn);
try
{
conn.Open();
OleDbDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
String id = reader[0].ToString().Trim();
string name = reader[1].ToString().Trim();
string moblenumber = reader[2].ToString().Trim();
if (!string.IsNullOrEmpty(id) && !string.IsNullOrEmpty(name) &&! string.IsNullOrEmpty(moblenumber))
{
AddressList al = new AddressList();
al.Id = Convert.ToInt32(id);
al.Name = name;
al.MobleNumber = moblenumber;
allist.Add(al);
}
}
//AddressList al1 = new AddressList();
//al1.Id = Convert.ToInt32(reader.GetName(0));
//al1.Name = reader.GetName(1);
//al1.MobleNumber = reader.GetName(2);
//allist.Add(al1);
//MessageBox.Show(reader.GetName(0));
//MessageBox.Show(reader.GetName(1));
//MessageBox.Show(reader.GetName(2));
return allist;
}
catch(Exception e)
{
e.ToString();
}
finally {
conn.Close();
}
return null;
}
//导出
public bool txtOut(String path,IList<string> list)
{
FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter m_streamWriter = new StreamWriter(fs);
m_streamWriter.Flush();
// 使用StreamWriter来往文件中写入内容
m_streamWriter.BaseStream.Seek(0, SeekOrigin.Begin);
// 把richTextBox1中的内容写入文件
foreach(string str in list)
m_streamWriter.Write(str);
//关闭此文件
m_streamWriter.Flush();
m_streamWriter.Close();
return true;
}
public bool excelOut(String path,IList<AddressList> list)
{
Excel.Application excel = new Excel.Application();
Range range = null;// 创建一个空的单元格对象
Worksheet sheet = null;
if (excel == null)
{
return false;
}
excel.Visible = false;// 不显示 Excel 文件,如果为 true 则显示 Excel 文件
excel.Workbooks.Add(Missing.Value);// 添加工作簿
sheet = (Worksheet)excel.ActiveSheet;// 获取当前工作表
for (int i=0;i<list.Count;i++)
{
range = sheet.get_Range("A" + (i + 1), Missing.Value);
range.Value2 = list[i].Id.ToString();
range = sheet.get_Range("B" + (i + 1), Missing.Value);
range.Value2 = list[i].Name;
range = sheet.get_Range("c" + (i + 1), Missing.Value);
range.Value2 = list[i].MobleNumber;
}
sheet.SaveAs(path, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
excel.ActiveWorkbook.Close(false, null, null); // 关闭 Excel 文件且不保存
excel.Quit(); // 退出 Excel
System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
GC.Collect();
return true;
}
[解决办法]
你采用了流导出Excel,好处是速度快,文件小,没有用到Excel组件;缺点是:非真正的EXCEL标准格式,所以导入不进去。
[解决办法]
建议这样处理
导出:使用xml或者html存为.xls
导入:1 Excel的Com打开要导入的文件,另存为xls格式的到一个临时目录(这样可以可以转换为标准格式)
2 使用oledb读取另存的那个文件