目的:用户通过界面点击导出EXCEL后,在导出的文件上做修改,再将其导入
1,我用直接从datagrid中导出的方法导出Excel,这时做导入时遇到外部表不是
1,我用直接从datagrid中导出的方法导出Excel,这时做导入时遇到外部表不是
解决方案 »
- 请问在页面跳转的时候出现一个图片提示用户读取数据中,然后在出现真正的数据?
- 关于fck toolbar的设置问题
- 使用模版页后如何高效率的联结自己的js?
- 读取一个word的内容读,并在FreeTextBox中显示出来.
- 关于.NET2005中GridView模版中的LinkButton或HyperLink传值以及取值的问题 小弟有急用谢谢!!!
- 怎么会自动调用JS的?晕了
- 诚心求解:关于页面跳转的问题
- 从Excel向数据库中导入数据。。。
- 下面是我写的购物车相关的部分,请各位老兄检查一下有没有错误,当我点击购买按钮的时候,购物车里没有显示所要购买的商品,是怎么回事啊!
- 大家介绍一下ASP。NET的一些好网站吧,多多交流!
- 怎么动态的生成连接
- 高分求助!用邮件来发表BLOG,要怎么处理?
1,我用直接从datagrid中导出的方法导出Excel,这时做导入时遇到外部表不是
预期的格式。
2. 我用OWC11导出EXCEL后,同样也时在导入遇到外部表不是预期的格式。它看起来和
标准的EXCEL文件没有区别,我不知道是什么原因
想向大家寻求一种较好的导出方法,希望能在导出的文件上能再导入,且方便部署。
请大家帮帮忙喔
Excel文件的读取
public DataSet ExcelToDS(string Path)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = null;
strExcel="select * from [sheet1$]";
myCommand = new OleDbDataAdapter(strExcel, strConn);
ds = new DataSet();
myCommand.Fill(ds,"table1");
return ds;
}
对于EXCEL中的表即sheet([sheet1$])如果不是固定的可以使用下面的方法得到
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,null);
string tableName=schemaTable.Rows[0][2].ToString().Trim();
Excel文件的写入
public void DSToExcel(string Path,DataSet oldds)
{
//先得到汇总EXCEL的DataSet 主要目的是获得EXCEL在DataSet中的结构
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source ="+path1+";Extended Properties=Excel 8.0" ;
OleDbConnection myConn = new OleDbConnection(strCon) ;
string strCom="select * from [Sheet1$]";
myConn.Open ( ) ;
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom, myConn ) ;
ystem.Data.OleDb.OleDbCommandBuilder builder=new OleDbCommandBuilder(myCommand);
//QuotePrefix和QuoteSuffix主要是对builder生成InsertComment命令时使用。
builder.QuotePrefix="["; //获取insert语句中保留字符(起始位置)
builder.QuoteSuffix="]"; //获取insert语句中保留字符(结束位置)
DataSet newds=new DataSet();
myCommand.Fill(newds ,"Table1") ;
for(int i=0;i<oldds.Tables[0].Rows.Count;i++)
{
//在这里不能使用ImportRow方法将一行导入到news中,因为ImportRow将保留原来DataRow的所有设置(DataRowState状态不变)。在使用ImportRow后newds内有值,但不能更新到Excel中因为所有导入行的DataRowState!=Added
DataRow nrow=aDataSet.Tables["Table1"].NewRow();
for(int j=0;j<newds.Tables[0].Columns.Count;j++)
{
nrow[j]=oldds.Tables[0].Rows[i][j];
}
newds.Tables["Table1"].Rows.Add(nrow);
}
myCommand.Update(newds,"Table1");
myConn.Close();
}
当我把导出的EXCEL文件内容复制到一个新的excel后,就可导入了。
好像是内容都是标准的,就是导出的excel文件有问题,这是为什么?
int j=0;
OWC11.SpreadsheetClass xlsheet=new OWC11.SpreadsheetClass();
//输出标题
foreach (DataColumn dsItems in ds.Tables[0].Columns)
{
xlsheet.ActiveSheet.Cells[1,i+1]=dsItems.ColumnName;
//xlsheet.ActiveSheet.Cells[1, i + 1]Font.Bold = True;
//设置格式
xlsheet.ActiveSheet.get_Range(xlsheet.Cells[1, 1], xlsheet.Cells[1, i + 1]).Font.set_Name("宋体");
xlsheet.ActiveSheet.get_Range(xlsheet.Cells[1, 1], xlsheet.Cells[1, i + 1]).Font.set_Bold(true);
xlsheet.ActiveSheet.get_Range(xlsheet.Cells[1, 1], xlsheet.Cells[1, i + 1]).Font.set_Size(10);
i = i + 1;
}
//输出字段
int count=ds.Tables[0].Rows.Count;
int numbercols=ds.Tables[0].Columns.Count;
for (i=0;i<count-1;i++)
{
for (j=0;j<numbercols;j++)
{
xlsheet.ActiveSheet.Cells[i + 2, j + 1] = ds.Tables[0].Rows[i][j].ToString().Replace(" ", " ").Trim();
}
}
try
{//注意导出时不同产生同名,否则会产生异常0xE004002A
xlsheet.Export(tmpAddr,OWC11.SheetExportActionEnum.ssExportActionNone,OWC11.SheetExportFormat.ssExportAsAppropriate);
return true;
}
catch
{
return false;
}
代码要与excel组件版本一至。