Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft.Office.Interop.Excel.Application SaveAs()方法不保留编码_C#_Excel_Csv_Encoding - Fatal编程技术网

C# Microsoft.Office.Interop.Excel.Application SaveAs()方法不保留编码

C# Microsoft.Office.Interop.Excel.Application SaveAs()方法不保留编码,c#,excel,csv,encoding,C#,Excel,Csv,Encoding,我在将excel文件保存为CSV和将编码保存为C#时遇到问题。具体地说,下面将获取一个excel文件,并将其保存为具有相同名称的csv文件,该文件将传递给loadCsvData函数,该函数的任务是以有组织的方式将数据插入数据库。我的问题是excel文件包含csv格式中无法识别的分数符号,除非我手动打开每个.xml并另存为csv(由于某种原因,这可以工作,而Microsoft.Office.Interop.excel.Application方法SaveAs()不能工作): 列表数据=新列表();

我在将excel文件保存为CSV和将编码保存为C#时遇到问题。具体地说,下面将获取一个excel文件,并将其保存为具有相同名称的csv文件,该文件将传递给loadCsvData函数,该函数的任务是以有组织的方式将数据插入数据库。我的问题是excel文件包含csv格式中无法识别的分数符号,除非我手动打开每个.xml并另存为csv(由于某种原因,这可以工作,而Microsoft.Office.Interop.excel.Application方法SaveAs()不能工作):

列表数据=新列表();
字符串文件名=(date.ToString(“MM/dd/yyyy”)+“.csv”)。替换(“/”,”);
字符串excelFileName=(date.ToString(“MM/dd/yyyy”)+“.xml”)。替换(“/”,”);
System.Console.WriteLine(“处理文件:“+fileName”);
System.Console.ReadLine();
//打开excel并另存为csv。然后处理数据
Microsoft.Office.Interop.Excel.Application app=新的Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook工作簿=app.Workbooks.Open(@“C:\Users\TAG\Desktop\TIP holdings\”+excelFileName);
工作簿.SaveAs(@“C:\Users\TAG\Desktop\TIP holdings\CSV Data\”+文件名,Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV);
工作簿。关闭(false,“,true);
数据=加载CSVDATA(文件名);
插入数据(数据);

我不知道这个问题的确切答案,但解决此类问题的一种常见方法是使用Excel的宏记录器。将您在UI中执行的操作记录为VB宏,在宏编辑器中将其打开,然后查看宏调用的命令。这将为您提供有关需要传递给
SaveAs
方法的参数的线索。您是否尝试过将
TextCodepage
参数设置为
SaveAs
方法。能否提供一个示例文件?或者,至少是你所指的那种编码的一个例子?@RichardCook这是个好主意,但到目前为止,它给我的只是使用xlCSV格式。我不确定您所说的TextCodepage参数是什么意思。@varocabas我需要utf-8,如果可能
TextCodepage
在中有记录。
            List<string[]> data = new List<string[]>();
            string fileName = (date.ToString("MM/dd/yyyy") + ".csv").Replace("/","");
            string excelFileName = (date.ToString("MM/dd/yyyy") + ".xml").Replace("/","");
            System.Console.WriteLine("Processing file: " + fileName);
            System.Console.ReadLine();

            // Open excel and save as csv. Then process the data
            Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook workBook = app.Workbooks.Open(@"C:\Users\TAG\Desktop\TIP holdings\" + excelFileName);
            workBook.SaveAs(@"C:\Users\TAG\Desktop\TIP holdings\CSV Data\" + fileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV);
            workBook.Close(false,"",true);

            data = loadCsvData(fileName);
            insertData(data);