将XLSX读入MFC应用程序

我需要从XLSX文档读入数据到我的MFC应用程序。 它一直工作正常,但我现在有阅读外语字符的要求,他们迷路了。

我需要阅读的示例值是:

Лицеитяло

Мамаибебе

目前我首先使用我在网上find的以下脚本将xlsx转换为csv

if WScript.Arguments.Count < 2 Then WScript.Echo \"Error!Please specify the source path and the destination.Usage: XlsToCsv SourcePath.xls Destination.csv Wscript.Quit End If Dim numRows Dim numCols Dim oExcel Set oExcel = CreateObject("Excel.Application") oExcel.DisplayAlerts = False Dim oBook Set oBook = oExcel.Workbooks.Open(Wscript.Arguments.Item(0)) Set oWorksheet = oBook.Worksheets(1) oWorksheet.Activate oWorksheet.Cells.Replace ",", "" Dim celltxt celltxt = oWorksheet.Cells(1,1).Text If InStr(1, celltxt, \"Date\") Then For count = 13 to 17 oWorksheet.Columns(count).NumberFormat = "0" Next Else For count = 1 to 4 oWorksheet.Columns(count).NumberFormat = "0" Next End If numRows = oWorksheet.UsedRange.Rows.Count numCols = oWorksheet.UsedRange.Columns.Count Const adTypeText = 2 Const adSaveCreateOverWrite = 2 Dim BinaryStream Set BinaryStream = CreateObject("ADODB.Stream") BinaryStream.Charset = "UTF-8" BinaryStream.Type = adTypeText BinaryStream.Open For r = 1 To numRows s = "" For c = 1 To numCols s = s & oWorksheet.Cells(r, c).Value If c < numCols Then s = s & "," End If Next BinaryStream.WriteText s, 1 Next BinaryStream.SaveToFile WScript.Arguments.Item(1), adSaveCreateOverWrite BinaryStream.Close oBook.Close False oExcel.Quit 

一旦这个脚本运行,我在任何进一步处理之前打开生成的csv,csv中的数据看起来很好。

一旦该csv由应用程序处理(使用CRecordSet加载),上面的值看起来如下所示:

||||||||||||||||||||||||||||||||||||

|?| – | – | – | | |-|||-||

我发现,如果在处理之前打开csv并转到“另存为”,则“另存为types”值将显示在“Unicode文本”上。 如果我现在通过保存为“CSV(逗号分隔)”覆盖csv,然后让文件处理到我的应用程序,结果值如下所示:

TTЎЎшЄ

|рьршсхсх

如果我手动将csv保存为“CSV(MS-DOS)”,然后让我的应用程序处理它,值出来正确:

Лицеитяло

Мамаибебе

所以一方面,我不明白的差异,为什么我需要MS-DOS的csv版本让我的应用程序读取的值正确,其次,我需要能够正确处理数据,而不必手动另存为在之间。

任何帮助非常感谢!

非常感谢

更新:

只是为了testing,我改变了我的代码(运行脚本转换为csv)输出到一个.txt而不是.csv,输出文件看起来正好在我的应用程序读取之前,但它仍然从那里import到我的应用程序错误。

这里是输出.txt的内容:

 From Date,To Date,Store ID,Store Name,Retailer,Retail Format,Region,Cluster,Market Attr 1 (Numeric),Market Attr 2 (Numeric),Market Attr 3 (Text),Market Attr 4 (Text),Market Attr 5 (Text),Product ID,EAN (Barcode),UPC (Product Code),Brand,Description,Size & Uom,Size,Uom,Supplier,Shrink Pack,Minimum Display Depth,KVI,Status,Product Height,Product Width,Product Depth,Supergroup A,Supergroup B,Category,Sub Category,Segment,Sub Segment,Product Attr 1 (Numeric),Product Attr 2 (Numeric),Product Attr 3 (Text),Product Attr 4 (Text),Product Attr 5 (Text),Sales (Value),Units (Volume),Sales at Cost,Ranging Indicator,Fact 1 (Numeric),Fact 2 (Numeric),Fact 3 (Numeric),Fact 4 (Text),Fact 5 (Text) 01/01/2014,31/01/2016,130,Maritza,Clicks,Pharmacy,Plovdiv,A Range,1.99,2.99,Attribute 3,Attribute 4,Attribute 5,1347,7612729000518,ПОЛИНЕЙЛ лечебен лак за нокти 80мг/гр 33мл,Coca Cola,ПОЛИНЕЙЛ лечебен лак за нокти 80мг/гр 33мл,330ml,330,ml,Coca Cola,6,2,1,Active,CONVERT,37,36,Лице и тяло,Медицинска козметика,Carbonated Soft Drinks,Diet,On The Go,Cans,1.99,2.99,Attribute 3,Attribute 4,Attribute 5,136.27,12,122.21,1,1.99,2.99,3.99,Yes,No 01/01/2014,31/01/2016,130,Maritza,,Pharmacy,Plovdiv,,,,,,,1349,5903263245933,СУДО крем антисептичен 125гр,,СУДО крем антисептичен 125гр,,,,,,,,,66,6,6,Мама и бебе,Козметика бебе,,,,,,,,,,,,,,,,,, 01/01/2014,31/01/2016,130,Maritza,,Pharmacy,Plovdiv,,,,,,,1381,,СПРИНЦОВКА 1МЛ ТРИСЪСТАВНА инсулинова спринцовка х 1бр,,СПРИНЦОВКА 1МЛ ТРИСЪСТАВНА инсулинова спринцовка х 1бр,,,,,,,,,198,3,1,Мама и бебе,Храни и напитки бебе,,,,,,,,,,,,,,,,,, 01/01/2014,31/01/2016,130,Maritza,,Pharmacy,Plovdiv,,,,,,,1607,8716200646536,ФРИЗОПЕП AC 400гр,,ФРИЗОПЕП AC 400гр,,,,,,,,,123,10,10,Мама и бебе,Храни и напитки бебе,,,,,,,,,,,,,,,,,,