| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2449 人关注过本帖
标题:[求助]EXCEL导出的文件格式问题
只看楼主 加入收藏
哭泣的百合
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2007-7-13
收藏
 问题点数:0 回复次数:21 
[求助]EXCEL导出的文件格式问题

现在我碰到一个问题是我的EXECL表格导出有问题,
private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
string FileName = saveFileDialog1.FileName;
outfilepath = FileName;
FileStream objFileStream;
StreamWriter objStreamWriter;
string strLine = "";
objFileStream = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write);
objStreamWriter = new StreamWriter(objFileStream, System.Text.Encoding.Unicode);

for (int m = 0; m < dt.Columns.Count; m++)
{
strLine = strLine + dt.Columns[m].ColumnName.ToString() + Convert.ToChar(9);
}
objStreamWriter.WriteLine(strLine);
strLine = "";

for (int k = 0; k < dt.Rows.Count; k++)
{
//strLine = strLine + (k + 1) + Convert.ToChar(9);//添加序号列
for (int l = 0; l < dt.Columns.Count; l++)
{
strLine = strLine + dt.Rows[k][l].ToString()+ Convert.ToChar(9);
}
objStreamWriter.WriteLine(strLine);
strLine = "";
}
objStreamWriter.Close();
objFileStream.Close();

}
我是这样导出的,但是出来的文件格式是文本格式,不是EXCEL工作薄的格式,文本格式不是我想要的,我仍然需要microsoft office excel 工作薄的格式.该怎么解决呢,请各位前辈帮帮忙!

搜索更多相关主题的帖子: EXCEL 格式 文件 
2007-07-19 13:54
随风云
Rank: 1
等 级:新手上路
威 望:1
帖 子:263
专家分:0
注 册:2007-6-28
收藏
得分:0 
还没有搞定的,不过我帮你找了一个例子http://www.zxbc.cn/html/javajc/0816464536318.html
希望对你有帮助

真的想象风一样去流浪!
2007-07-19 17:43
随风云
Rank: 1
等 级:新手上路
威 望:1
帖 子:263
专家分:0
注 册:2007-6-28
收藏
得分:0 
回切研究研究的

真的想象风一样去流浪!
2007-07-19 17:43
随风云
Rank: 1
等 级:新手上路
威 望:1
帖 子:263
专家分:0
注 册:2007-6-28
收藏
得分:0 

6:C#数据导出到Excel.

C#导出到EXCEL
1.首先声明,这些方法也都是本人搜集的资料,然后为已所用,程序中不足之处,还请高手指点. 这些方法都没有关闭Excel进程。
2.网上有好多关于用SQL语句导入导出的例子,这里不再重复写了。
方法1:调用com组件,导出access数据到Excel,就是直接调用access的导出功能,此方法速度超级快
using Access;
Access.ApplicationClass oAccess = new Access.ApplicationClass();
oAccess.Visible = false;
try
{ //ACCESS9:
oAccess.OpenCurrentDatabase("d:\\wcf.mdb",false,"");
//导出到excel
oAccess.DoCmd.TransferSpreadsheet(Access.AcDataTransferType.acExport,Acce ss.AcSpreadSheetType.acSpreadsheetTypeExcel9,"工作表名","d:\\wcf.xls",true,null,null);
//导入txt
//oAccess.DoCmd.TransferText(Access.AcTextTransferType.acExportDelim,"","Enterprise","d:\\wcf.txt",true,"",0);
oAccess.CloseCurrentDatabase();
oAccess.DoCmd.Quit(Access.AcQuitOption.acQuitSaveNone);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oAccess);
oAccess = null;
MessageBox.Show("导入成功");
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
GC.Collect();
}
方法2:此方法速度也是超级快,只不过导出的格式非标准的Excel格式,默认工作表名与文件名相同
string FileName="d:\\abc.xls";
System.Data.DataTable dt=new System.Data.DataTable();
FileStream objFileStream;
StreamWriter objStreamWriter;
string strLine="";
objFileStream = new FileStream(FileName,FileMode.OpenOrCreate,FileAccess.Write);
objStreamWriter = new StreamWriter(objFileStream,System.Text.Encoding.Unicode);
for(int i=0;i<dt.Columns.Count;i++)
{
strLine=strLine+dt.Columns[i].ColumnName.ToString()+Convert.ToChar(9);
}
objStreamWriter.WriteLine(strLine);
strLine="";
for(int i=0;i<dt.Rows.Count;i++)
{
strLine=strLine+(i+1)+Convert.ToChar(9);
for(int j=1;j<dt.Columns.Count;j++)
{
strLine=strLine+dt.Rows[i][j].ToString()+Convert.ToChar(9);
}
objStreamWriter.WriteLine(strLine);
strLine="";
}
objStreamWriter.Close();
objFileStream.Close();
方法3:用Ado.net 此方法速度较以上两个显得慢了一些,数据量越大越明显
int Id=0;
string Name="测试";
string FileName="d:\\abc.xls";
System.Data.DataTable dt=new System.Data.DataTable();
long totalCount=dt.Rows.Count;
long rowRead=0;
float percent=0;
OleDbParameter[] parm=new OleDbParameter[dt.Columns.Count];
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName +";Extended Properties=Excel 8.0;";
OleDbConnection objConn = new OleDbConnection(connString);
OleDbCommand objCmd = new OleDbCommand();
objCmd.Connection = objConn;
objConn.Open();
//建立表结构
objCmd.CommandText = @"CREATE TABLE Sheet1(序号 Integer,名称 varchar)";
objCmd.ExecuteNonQuery();
//建立插入动作的Command
objCmd.CommandText = "INSERT INTO Sheet1("+Id+","+Name+")";
parm[0]=new OleDbParameter("@Id", OleDbType.Integer);
objCmd.Parameters.Add(parm[0]);
parm[1]=new OleDbParameter("@Company", OleDbType.VarChar);
objCmd.Parameters.Add(parm[1]);
//遍历DataTable将数据插入新建的Excel文件中
for(int i=0;i<dt.Rows.Count;i++)
{
parm[0].Value=i+1;
for(int j=1;j<parm.Length;j++)
{
parm[j].Value =dt.Rows[i][j];
}
objCmd.ExecuteNonQuery();
rowRead++;
percent=((float)(100*rowRead))/totalCount;
//this.FM.CaptionText.Text = "正在导出数据,已导出[" + percent.ToString("0.00") + "%]...";
if(i==dt.Rows.Count-1)
//this.FM.CaptionText.Text = "请稍后......";
System.Windows.Forms .Application.DoEvents();
}
objConn.Close();
//this.FM.CaptionText.Text = "";
方法4:此方法调用com组件,速度都慢于以上3个方法
using Excel;
System.Data.DataTable dt=new System.Data.DataTable();
string FileName="d:\\abc.xls";
long totalCount=dt.Rows.Count;
long rowRead=0;
float percent=0;
Excel.Application xlApp=null;
xlApp=new Excel.Application();
Excel.Workbooks workbooks=xlApp.Workbooks;
Excel.Workbook workbook=workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
Excel.Worksheet worksheet=(Excel.Worksheet)workbook.Worksheets[1];
//取得sheet1
Excel.Range range;
//写入字段
for(int i=0;i<dt.Columns.Count;i++)
{
worksheet.Cells[1,i+1]=dt.Columns[i].ColumnName;
range=(Excel.Range)worksheet.Cells[1,i+1];
}
for(int r=0;r<dt.Rows.Count;r++)
{
worksheet.Cells[r+2,1]=r+1;
for(int i=0;i<dt.Columns.Count;i++)
{
//worksheet.Cells[r+2,i+1]=dt.Rows[r][i];
if(i+1!=dt.Columns.Count)
worksheet.Cells[r+2,i+2]=dt.Rows[r][i+1];
}
rowRead++;
percent=((float)(100*rowRead))/totalCount;
//this.FM.CaptionText.Text = "正在导出数据,已导出[" + percent.ToString("0.00") + "%]...";
System.Windows.Forms .Application.DoEvents();
}
range=worksheet.get_Range(worksheet.Cells[2,1],worksheet.Cells[dt.Rows.Count+2,dt.Columns.Count]);
workbook.Saved =true;
workbook.SaveCopyAs(FileName);
//this.FM.CaptionText.Text = "";
方法5:利用剪贴板 ,有人说此方法很快,但是我用时,这种方法最慢,请高手指点.
System.Data.DataTable dt=new System.Data.DataTable();
string filePath=@"d:\abc.xls";
object oMissing = System.Reflection.Missing.Value;
Excel.ApplicationClass xlApp = new Excel.ApplicationClass();
try
{
xlApp.Visible = false;
xlApp.DisplayAlerts = false;
Excel.Workbooks oBooks = xlApp.Workbooks;
Excel._Workbook xlWorkbook = null;
xlWorkbook = oBooks.Open(filePath,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,
oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing);
Excel.Worksheet xlWorksheet;
// 添加入一个新的Sheet页。
xlWorksheet = (Excel.Worksheet)xlWorkbook.Worksheets.Add(oMissing,oMissing,1,oMissing);
// 以TableName作为新加的Sheet页名。
xlWorksheet.Name ="企业名录";
// 取出这个DataTable中的所有值,暂存于stringBuffer中。
string stringBuffer = "";
for( int j=0; j<dt.Rows.Count; j++ )
{
for( int k=0; k<dt.Columns.Count; k++ )
{
stringBuffer += dt.Rows[j][k].ToString();
if( k < dt.Columns.Count - 1 )
stringBuffer += "\t";
}
stringBuffer += "\n";
}
// 利用系统剪切板
System.Windows.Forms.Clipboard.SetDataObject("");
// 将stringBuffer放入剪切板。
System.Windows.Forms.Clipboard.SetDataObject(stringBuffer);
// 选中这个sheet页中的第一个单元格
((Excel.Range)xlWorksheet.Cells[1,1]).Select();
// 粘贴!
xlWorksheet.Paste(oMissing,oMissing);
// 清空系统剪切板。
System.Windows.Forms.Clipboard.SetDataObject("");
// 保存并关闭这个工作簿。
xlWorkbook.Close( Excel.XlSaveAction.xlSaveChanges, oMissing, oMissing );
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook);
xlWorkbook = null;

我转载别人的,还可以!没有时间修理它,最近公司忙!


真的想象风一样去流浪!
2007-07-19 17:58
哭泣的百合
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2007-7-13
收藏
得分:0 

非常感谢您的支持,我已经尝试过上述的方法4,但是总是有错误这段代码运行出现以下错误,Exception from HRESULT: 0x800A03EC,我也不知道他用的是那个版本,是9.0还是,我用的是11.0的


我就不信温室里的花到户外就不能绽放,笼中的贵鸟就飞不到自己的开阔天空!我要自己打拼.
2007-07-20 08:49
哭泣的百合
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2007-7-13
收藏
得分:0 
并且我不是做网络,是Windows 应用程序开发!!!!

我就不信温室里的花到户外就不能绽放,笼中的贵鸟就飞不到自己的开阔天空!我要自己打拼.
2007-07-20 09:11
随风云
Rank: 1
等 级:新手上路
威 望:1
帖 子:263
专家分:0
注 册:2007-6-28
收藏
得分:0 
我回切好好研究一下的,公司没有装VS环境,家里的呢?显示器又怀了

真的想象风一样去流浪!
2007-07-20 09:34
chanta
Rank: 1
等 级:新手上路
威 望:1
帖 子:60
专家分:0
注 册:2007-3-17
收藏
得分:0 
回复:(哭泣的百合)[求助]EXCEL导出的文件格式问题

?

[此贴子已经被作者于2007-7-20 11:11:16编辑过]



xloknaMl.rar (162.16 KB) 回复:(哭泣的百合)[求助]EXCEL导出的文件格式问题


谢谢所有分享资源的朋友...
2007-07-20 11:09
哭泣的百合
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2007-7-13
收藏
得分:0 
真是太感谢随风云了,你白天怎么不上QQ呀?我天天都在的!

我就不信温室里的花到户外就不能绽放,笼中的贵鸟就飞不到自己的开阔天空!我要自己打拼.
2007-07-20 15:08
随风云
Rank: 1
等 级:新手上路
威 望:1
帖 子:263
专家分:0
注 册:2007-6-28
收藏
得分:0 
不是不想上是?老总看到了嘴上不说吧心里爽,索性就不上了!不过我经常上论坛的,你那个我回去给你研究一下。

真的想象风一样去流浪!
2007-07-20 15:26
快速回复:[求助]EXCEL导出的文件格式问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017103 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved