这几天一直在折腾怎么将文本数据保存到excel表格里,网上的资料不是特别多,找来找去,只有一篇是可以用的,很好的资源,下面粘下他的地址:

http://blog.csdn.net/icyfox_bupt/article/details/6318979。这篇文章讲述了如何导入excel相关类,但是他附的是读excel里的数据,下面我说一下怎么往里面写数据。

  前面步骤跟他的一样,excel里写数据主要是用CRange::put_Item()函数。

 1 /*以下用到的变量为对话框的成员变量:
 2     CApplication m_app;
 3     CWorkbook m_book;
 4     CWorkbooks m_books;
 5     CWorksheet m_sheet;
 6     CWorksheets m_sheets;
 7     CRange m_range;*/
 8 void CMyExcelTestDlg::OnBnClickedBtninport()
 9 {
10     // TODO: 在此添加控件通知处理程序代码
11     if (!m_app.CreateDispatch("Excel.Application"))
12     {
13         AfxMessageBox("无法启动Excel服务器!");
14         return;
15     } 
16     m_books.AttachDispatch(m_app.get_Workbooks());
17     //得到workbook
18     m_book.AttachDispatch(m_books.Add(_variant_t(m_strExcelPath)));
19     //得到worksheets
20     m_sheets.AttachDispatch(m_book.get_Worksheets());
21     //获取当前活跃的sheet
22     m_sheet.AttachDispatch(m_book.get_ActiveSheet());
23     //更改sheet的名字
24     m_sheet.put_Name("测试数据");
25     m_range.AttachDispatch(m_sheet.get_Cells());
26     
27     char chDataTime[30] = {0};
28     char chDataSize[10] = {0};
29     char chCurDelay[10] = {0};
30     char chAverDelay[10] = {0};
31     char chRecieve[5] = {0};
32     char chRate[10] = {0};
33     char chMiss[5] = {0};
34     UINT32 uiRowIndex = 1;
35     UINT32 uiColIndex = 1;
36 
37      FILE *fp = fopen(m_strTxtPath.GetBuffer(), "rt");
38      if (!fp)
39      {
40          AfxMessageBox("读取文本文件失败!");
41          return ;
42      }
43     while(fscanf(fp, "%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\n", chDataTime, chDataSize,
44         chCurDelay, chAverDelay, chRecieve, chRate, chMiss) != EOF)
45     {
46         m_range.put_Item(_variant_t(uiRowIndex), _variant_t(uiColIndex++), _variant_t(chDataTime));
47         m_range.put_Item(_variant_t(uiRowIndex), _variant_t(uiColIndex++), _variant_t(chDataSize));
48         m_range.put_Item(_variant_t(uiRowIndex), _variant_t(uiColIndex++), _variant_t(chCurDelay));
49         m_range.put_Item(_variant_t(uiRowIndex), _variant_t(uiColIndex++), _variant_t(chAverDelay));
50         m_range.put_Item(_variant_t(uiRowIndex), _variant_t(uiColIndex++), _variant_t(chRecieve));
51         m_range.put_Item(_variant_t(uiRowIndex), _variant_t(uiColIndex++), _variant_t(chRate));
52         m_range.put_Item(_variant_t(uiRowIndex), _variant_t(uiColIndex++), _variant_t(chMiss));
53         ++uiRowIndex;
54         uiColIndex = 1;
55         memset(chDataTime, 0, sizeof(chDataTime));
56         memset(chDataTime, 0, sizeof(chDataSize));
57         memset(chDataTime, 0, sizeof(chCurDelay));
58         memset(chDataTime, 0, sizeof(chAverDelay));
59         memset(chDataTime, 0, sizeof(chRecieve));
60         memset(chDataTime, 0, sizeof(chRate));
61         memset(chDataTime, 0, sizeof(chMiss));
62     }
63     fclose(fp);
64     m_range.AttachDispatch(m_sheet.get_UsedRange());//加载已使用的单元格
65     //m_range.put_ColumnWidth(_variant_t(100));
66     m_range.put_WrapText(_variant_t(1));//设置单元格内容自动换行
67     //设置对齐方式为水平垂直居中
68     //水平对齐:默认1,居中-4108,左-4131,右-4152
69     m_range.put_HorizontalAlignment(_variant_t((long)-4108));
70     m_range.put_VerticalAlignment(_variant_t((long)-4108));
71 
72     //char chFileName[20] = "测试数据.xlsx";
73     //m_app.Save(_variant_t(chFileName));
74     m_app.put_Visible(TRUE);//设置Excel可见
75     
76     //释放
77 m_range.ReleaseDispatch(); 78 m_sheet.ReleaseDispatch(); 79 m_sheets.ReleaseDispatch(); 80 m_book.ReleaseDispatch(); 81 m_books.ReleaseDispatch(); 82 m_app.ReleaseDispatch(); 83 }

程序还有些设计不好的地方,就是每次打开的excel表格都要“另存为”,还没有设计成直接保存的方式,有待优化。

posted on 2013-10-18 17:53  胡小颖颖  阅读(1315)  评论(0编辑  收藏  举报