如何将列表控件中的数据写入MFC中的CSV文件[英] How to write the data from the list control to a CSV file in MFC

本文是小编为大家收集整理的关于如何将列表控件中的数据写入MFC中的CSV文件的处理方法,想解了如何将列表控件中的数据写入MFC中的CSV文件的问题怎么解决?如何将列表控件中的数据写入MFC中的CSV文件问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

你好

我正在构建一个 MFC 应用程序,我想将列表控件中的数据保存到 CSV 文件中,谁能给我一个相同的示例代码.

由于这个原因,我在项目之间受到打击,如果有人帮助我,我将不胜感激.

推荐答案

FIRST ANSWER
您可以使用本文中的信息:
在MFC中读写CSV文件[^]

本链接:
http://stackoverflow.com/questions/1120140/csv-parser-in-c/[^]

第二个答案
看看这个问题:create Files in appending mode[^]
看看解决方案1.

也许它会解决你的问题.

希望这会有所帮助...

只需遍历列表控件的行和列:
// Get column label text.
void CMyListCtrl::GetHeaderItemText(CString& str, int nItem) const
{
    TCHAR lpBuffer[256] = _T("");
    LVCOLUMN lvc;
    memset(&lvc, 0, sizeof(LVCOLUMN));
    lvc.mask = LVCF_TEXT;
    lvc.pszText = lpBuffer;
    lvc.cchTextMax = 256;
    VERIFY(GetColumn(nItem, &lvc));	// asserts if string too long
    str = lpBuffer;
}

// Write report style list control content to CSV file.
bool CMyListCtrl::WriteCSV(LPCTSTR lpszFile, bool bHeader) const
{
    FILE *f = _tfopen(lpszFile, _T("wb"));
    if (NULL == f)
        return false;
    int nRows = GetItemCount();
    int nColumns = GetHeaderCtrl()->GetItemCount();
    if (bHeader)
    {
        for (int j = 0; j < nColumns; j++)
        {
            int k = GetHeaderCtrl()->OrderToIndex(j);
            if (j)
                fprintf(f, ",");
            CString strItem;
            GetHeaderItemText(strItem, k);
#ifdef _UNICODE
            CStringA strItemA(strItem.GetString());
            fprintf(f, "\"%s\"", strItemA.GetString());
#else
            fprintf(f, "\"%s\"", strItem.GetString());
#endif
        }
        fprintf(f, "\r\n");
    }
    for (int i = 0; i < nRows; i++)
    {
        for (int j = 0; j < nColumns; j++)
        {
            int k = GetHeaderCtrl()->OrderToIndex(j);
            if (j)
                fprintf(f, ",");
            CString strItem = GetItemText(i, k);
#ifdef _UNICODE
            CStringA strItemA(strItem.GetString());
            fprintf(f, "\"%s\"", strItemA.GetString());
#else
            fprintf(f, "\"%s\"", strItem.GetString());
#endif
        }
        fprintf(f, "\r\n");
    }
    fclose(f);
    return true;
}

这会导出带有 Unicode 版本的 ANSI 文本.大多数应用程序在导入 CSV 时需要 ANSI 文件.

代码可能会增强:

  • 更新:出现在单元格中时必须转义引号字符,
  • 可选使用单引号.
  • 可选使用其他分隔符(例如'';'').
  • 可选使用单引号.
  • 可选使用其他分隔符.
  • li>
  • 仅引用包含引号或分隔符的单元格.
  • 可选地排除隐藏列(宽度为 0 的列).
  • 可选地仅导出选定的行.
  • li>

本文地址:https://www.itbaoku.cn/post/1355757.html

相关标签/搜索