CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何从.txt文件中读出数据然后写入到xls文件中(100分求助)

楼主dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))2005-12-20 19:29:49 在 VC/MFC / 基础类 提问

如何从.txt文件中读出数据然后写入到xls文件中  
   
  大约是这样的,一个文件夹下面有多个.txt文件,每个文件的格式为  
  432432  
  431455  
  7654  
  8765875  
  8758  
  有很多行数字  
   
  现读出这些数字然后写到xls文件中的指定的一列中(一个.txt文件对应一个.xls文件)  
  问题点数:100、回复次数:34Top

1 楼yangyzqo(欺世盗名来灌水)回复于 2005-12-20 19:46:31 得分 4

文本文件一次读一行了,再写入xls了,不过没有试过,呵呵Top

2 楼wshcdr(dd)回复于 2005-12-20 20:07:48 得分 4

利用EXCEL自动化写入.xls文件Top

3 楼dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))回复于 2005-12-20 20:11:02 得分 0

怎么没有人哦,好像到过年还有好久吧!!!  
   
  写xls文件时,怎么样能精确到那一列那一行呢?  
   
  怎么样读取一个txt文件的一行?  
   
  如有写好的示例代码请发到zq_ding@sae.com.hk,有重分Top

4 楼wshcdr(dd)回复于 2005-12-20 20:11:56 得分 8

参考  
  http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=193263Top

5 楼lzl1010(genghiskhan)回复于 2005-12-21 07:52:38 得分 4

用逗號分隔開每一行中的數字,將這個文件命名為sth.csv(csv   格式的文件).用逗號分開的每一段就寫到excel中的一列,每一行對應excel中的一行.  
  eg:  
  1122,2222,333  
  55,22,33333  
  ....  
  另存為         "a.csv"  
  打開a.csv看,這樣可以   嗎?  
  Top

6 楼lisypro()回复于 2005-12-21 07:56:00 得分 3

友情顶一下Top

7 楼yinzhaohui(努力)回复于 2005-12-21 09:35:03 得分 3

读文体文件不说了,写XLS使用ODBC操作excel文件写进去就可以了Top

8 楼yyan(清茶)回复于 2005-12-21 09:54:16 得分 3

同意   yinzhaohui(努力)   .读txt文件就用CStdioFile一次读一行吧Top

9 楼kugou123(酷狗)(彪悍的人生,不需要解释 www.xiaozhou.net)回复于 2005-12-21 10:02:35 得分 4

用自动化。   www.vckbase.com上面有篇文章的。Top

10 楼jazy()回复于 2005-12-21 10:59:08 得分 3

有个取巧的办法:txt文件里面排好行和列,每个字段用tab分隔,这样的txt直接改后缀名为xls,可以用excel直接打开的,另存一下就是excel格式了。Top

11 楼dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))回复于 2005-12-21 17:54:59 得分 0

CFileDialog   txtFileDlg(....);  
  CFile   m_txtfile;  
   
  strFileName=txtFileDlg.GetPathName();  
  OpenTxtFile(strFileName);//Custom  
  int   i=m_txtfile.GetLength();  
  m_txtfile.SeekToBegin();  
  int   len   =   m_txtfile.Read(strData.GetBuffer(12408),12408);  
  strData.ReleaseBuffer();  
  nPos=0;  
  int   nLength=0;  
  nLength=strData.GetLength();  
  strData=strData.Left(nLength);  
  for(i=0;;i++)  
  {  
  nLength=strData.GetLength();  
  nPos=strData.Find('\n',0);  
  str=strData.Left(nPos-1);  
  strData=strData.Right(nLength-nPos-1);  
  SaveDataToXls(str+'\n');//Custom  
  if(nPos<0)  
  break;  
  }  
  m_txtfile.Close();  
   
  我是这样实现的,可能这里写的不全,  
  但是好像还是可以的  
  Top

12 楼dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))回复于 2005-12-22 19:32:31 得分 0

读txt文件我知道了  
   
   
  现在想请各位教我如何写xls文件,写操作的格式是这样的:  
  第一列       第二列       第三列       第四列       ........  
  43232         543254       54325         344444       ........  
  43232         543254       54325         344444       ........  
  43232         543254       54325         344444       ........  
  43232         543254       54325         344444       ........  
  当然上面的数字是不一样的,现在要做的操作就是在原有的基础上再加列数,  
   
  我现在怎么写数据到指定的第五列,第六列.....Top

13 楼dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))回复于 2005-12-22 22:15:45 得分 0

有结果的请发到dzqsuper@eyou.comTop

14 楼danshuihepan(淡水河畔)回复于 2005-12-22 22:19:14 得分 5

jazy()   的方法最简单啦,我常用的Top

15 楼dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))回复于 2005-12-22 22:56:06 得分 0

是这样的,我的一个txt文件只有一列,也就是下面这样的  
  5423  
  5432  
  5542  
  5466  
  7654  
  .  
  .  
  .  
   
  现在要把这一列读出然后写到一个xls文件的指定一列上去  
  读出已经有了  
  现在只要写到一个xls文件的指定一列上去的方法  
   
  请大家关注......Top

16 楼ximenying(西门)回复于 2005-12-23 10:01:00 得分 3

我说个很好的解决方案,使用SQL   Server带的DTS来做转换,很方便,不过还有更方便的,那就是使用我写的一个转换工具,更可实现定时/条件转换,等等功能。Top

17 楼dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))回复于 2005-12-23 17:52:13 得分 0

ximenying(西门)  
  不知能否让我分享一下你的成果呢!!!Top

18 楼dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))回复于 2005-12-23 19:58:48 得分 0

另加一个问题:如何弹出选择文件夹的对话框?Top

19 楼iyaosan(aaaa)回复于 2005-12-23 22:29:04 得分 3

用ODBC   也行啊,装Exel   后就有ODBC   驱动的Top

20 楼ximenying(西门)回复于 2005-12-26 09:51:44 得分 3

我正准备做成共享软件呢?这之前暂时不就去共享它Top

21 楼Mackz(在相互)回复于 2005-12-26 11:18:47 得分 7

MSDN中的代码,Automate   Excel   to   Add   Data   from   a   DAO   Recordset   to   a   Workbook,稍作修改即可。  
   
   
  MFC   example  
  Start   a   new   dialog-based   MFC   AppWizard   EXE   project   named   "ExcelData."    
  Using   ClassWizard,   add   the   wrapper   classes   for   the   Excel   type   library.    
  Add   a   button   to   the   dialog   resource   IDD_EXCELDATA_DIALOG   and   add   the   following   code   to   the   button's   handler   in   ExcelDataDlg.cpp:    
  //For   optional   arguments  
          COleVariant   vOpt(DISP_E_PARAMNOTFOUND,   VT_ERROR);  
   
          CDaoDatabase   db;  
          CDaoRecordset   rs;  
          long   lNumCols;  
   
          //Get   a   recordset   that   represents   all   the   records   in   the   Products    
          //table   of   the   sample   Northwind   database  
          db.Open("C:\\Program   Files\\Microsoft   Office\\Office"   \  
                          "\\Samples\\Northwind.mdb",   FALSE,   FALSE);  
          rs.m_pDatabase   =   &db;          
          rs.Open(AFX_DAO_USE_DEFAULT_TYPE,   "Select   *   From   Products",   0);  
          lNumCols   =   rs.GetFieldCount();  
   
          //Start   a   new   workbook   in   Excel  
          _Application   oApp;  
          oApp.CreateDispatch("Excel.Application");  
          if   (!oApp)  
          {  
                  AfxMessageBox("Cannot   start   Excel");  
                  return;  
          }  
          Workbooks   oBooks   =   oApp.GetWorkbooks();  
          _Workbook   oBook   =   oBooks.Add(vOpt);  
          Worksheets   oSheets   =   oBook.GetWorksheets();  
          _Worksheet   oSheet   =   oSheets.GetItem(COleVariant((short)1));  
          Range   oRange;  
   
          //Transfer   the   data   in   the   recordset   to   the   worksheet  
          COleDispatchDriver   rs2;  
          rs2.AttachDispatch((LPDISPATCH)   rs.m_pDAORecordset);  
          oRange   =   oSheet.GetRange(COleVariant("A2"),   vOpt);  
          oRange.CopyFromRecordset((LPUNKNOWN)   rs2.m_lpDispatch,  
                                                            vOpt,   vOpt);  
          rs2.DetachDispatch();  
          rs2.ReleaseDispatch();  
   
          //Add   the   field   names   to   row   1  
          CDaoFieldInfo   FieldInfo;  
          for(long   i=0;   i<=lNumCols-1;i++)  
          {  
                  oRange   =   oSheet.GetRange(COleVariant("A1"),   vOpt);  
                  oRange   =   oRange.GetOffset(vOpt,   COleVariant(i));  
                  rs.GetFieldInfo(i,   FieldInfo,   AFX_DAO_PRIMARY_INFO);  
                  oRange.SetValue(COleVariant(FieldInfo.m_strName));  
          }  
   
          //Format   the   worksheet  
          oRange   =   oSheet.GetRange(COleVariant("A1"),   vOpt);  
          oRange   =   oRange.GetResize(COleVariant((short)1),    
                                                              COleVariant(lNumCols));  
          Font   oFont   =   oRange.GetFont();  
          oFont.SetBold(COleVariant((short)TRUE));  
          oRange   =   oRange.GetEntireColumn();  
          oRange.AutoFit();  
   
          //Make   Excel   visible   and   give   the   user   control  
          oApp.SetVisible(TRUE);  
          oApp.SetUserControl(TRUE);  
           
  Add   the   following   includes   to   ExcelDataDlg.cpp:    
  #include   "Excel8.h"   //or   "Excel9.h"   for   Excel   2000  
  #include   <afxdao.h>  
   
  Modify   CExcelDataApp::InitInstance()   in   ExcelData.cpp   to   start   COM   services:    
          if(!AfxOleInit())  
          {  
                  AfxMessageBox("Cannot   initialize   COM   services.");  
                  return   FALSE;  
          }  
   
  Build   and   run   the   application.   Click   the   button   you   added   to   the   dialog   box.   When   the   Automation   code   finishes   running,   you   see   the   contents   of   the   Products   table   in   a   new   worksheet   in   Microsoft   Excel.    
  Additional   notes  
  If   you   are   using   Microsoft   Excel   2000,   you   can   use   either   a   DAO   or   ADO   recordset   with   the   CopyFromRecordset   method.   The   Excel   97   CopyFromRecordset   method   supports   only   DAO   recordsets.  
   
  For   additional   information   on   using   an   ADO   recordset   with   the   CopyFromRecordset   method,   please   see   the   following   Microsoft   Knowledge   Base   article:  
   
  Top

22 楼jeapvan(多多)回复于 2005-12-26 14:24:11 得分 15

看看發到你信箱裡的那個,希望能有幫助Top

23 楼dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))回复于 2005-12-26 18:59:58 得分 0

jeapvan(多多):  
  你的邮件我已收到,谢谢你  
   
  我现在是想写数据到一个我指定的文件里面怎么弄呢?Top

24 楼dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))回复于 2005-12-26 21:59:46 得分 0

多多:  
  你好,我建了一个单文档的程序(视类是基于CFormView),然后和你一样的加一个菜单,在这个菜单响应函数里加上你的以下代码,为什么运行时会出错呢?  
  请帮我,要是白天发给我的话,请发到我给你的邮箱,晚上在这里角答就可,下面是你的代码:  
  void   CACDTranView::OnViewExcel()    
  {  
  COleVariant   vtOptional((long)DISP_E_PARAMNOTFOUND,  
  VT_ERROR),vtTrue((short)TRUE),vtFalse((short)FALSE);  
  _Application   *ExcelApp   =   new   _Application;  
   
  ExcelApp->CreateDispatch("excel.application");  
   
  //设置为显示  
  ExcelApp->SetVisible(TRUE);  
  //得到WorkBooks  
  .......  
  CString   str;  
  for(int   i=3;i<=5;i++)  
  {  
  str.Format("A%d",i);  
  myrange=workSheet.GetRange(COleVariant(str),COleVariant(str));  
  .......  
  }  
  delete   ExcelApp;  
  }Top

25 楼monstersky()回复于 2005-12-26 22:51:24 得分 9

既然用office   automation,偶问你个问题先。你用的excel啥子版本的?Top

26 楼weiyongzhao(好人)回复于 2005-12-27 13:59:39 得分 13

我有程序,邮箱是weiyongzhao100@163.comTop

27 楼dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))回复于 2005-12-27 17:51:49 得分 0

monstersky()   :XP  
   
    weiyongzhao(好人):能发给我吗?  
  Top

28 楼monstersky()回复于 2005-12-27 21:03:50 得分 3

对于不同的excel,调用方式也不同。所使用的库文件也不同。  
  比如2k使用的tlb文件和2003使用的olb文件。而有些函数的调用参数也不尽相同。比如2k使用的多个参数和2003使用的较少的参数,所以要根据不同的版本来测试。  
   
  将相应的(比如2003   的XL5CHS32.OLB)通过ClassWizard的automation导入之后,添加所有的类,然后看看office目录下关于VBA的帮助,自己就可以猜出来怎么使用。  
  olb文件导出也能看到对应的enum定义Top

29 楼dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))回复于 2005-12-27 22:06:28 得分 0

monstersky:  
  上面的jeapvan(多多)兄弟给我发了一个例子,他只加了excel9.h,excel9.cpp然后就可以用了  
   
  我和他一样的另建一个工程时编译能通过,运行时,会出错误!  
   
  我觉得我和他做的一样的,可是就是不知那里了了问题!!!  
   
  请  
   
  jeapvan(多多)  
   
  兄出来帮我解答Top

30 楼dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))回复于 2005-12-27 23:01:55 得分 0

weiyongzhao(好人),你好:  
  能不能发给我呢,我的邮箱dzqsuper@eyou.com,dzqsuper@sohu.com  
  Top

31 楼jeapvan(多多)回复于 2005-12-28 10:20:11 得分 0

在APP的類中的InitInstance()函數中加入語句AfxOleInit();就可以了Top

32 楼dzqsuper(数风流人物-还看打倒日本猪的人(抵制日货))回复于 2005-12-28 17:17:46 得分 0

jeapvan(多多):  
   
  我想打开指定的xls文件,然后写入数据,我该怎么弄呢?Top

33 楼jeapvan(多多)回复于 2005-12-28 19:31:54 得分 0

那你就用模板吧,那樣應該簡單點吧!,做個模板然後往裡面寫,我看一下,你去網上找一些例子,應該有你想要的那種Top

34 楼Snow_Ice11111(雪上加冰)回复于 2006-01-12 22:50:01 得分 3

还没有解决吗?看这里:http://www.vckbase.com/document/viewdoc/?id=693  
   
  有源码,里面写了个类CSpreadSheet可以访问、操作.xls和.csv文件。我看了一下,源码很容易看明白的^_^Top

相关问题

  • 文件内容的写入与读出?
  • 关于文件的写入,读出
  • 向文件写入32767,却读出255?
  • 字符串写入、读出的问题?
  • 数值数据的写入和读出
  • 图片的写入/读出问题?
  • 备注型字段写入读出的显示问题。
  • 文本文件的创建、写入、读出....高手请进!!
  • 文本文件的jsp创建、写入、读出....高手请进!!
  • applet怎样进行文件写入读出操作

关键词

  • 文件
  • 数据
  • excel
  • 代码
  • application
  • microsoft
  • strdata
  • 写入
  • xls
  • 读出

得分解答快速导航

  • 帖主:dzqsuper
  • yangyzqo
  • wshcdr
  • wshcdr
  • lzl1010
  • lisypro
  • yinzhaohui
  • yyan
  • kugou123
  • jazy
  • danshuihepan
  • ximenying
  • iyaosan
  • ximenying
  • Mackz
  • jeapvan
  • monstersky
  • weiyongzhao
  • monstersky
  • Snow_Ice11111

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo