2
        public void CreateFileOutput(object parameter)
        {
            string workSheetName, targetFile;
            workSheetName = "data"; targetFile = "data.csv";
            string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + SourceAppFilePath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';";
            OleDbConnection conn = null;
            StreamWriter wrtr = null;
            OleDbCommand cmd = null;
            OleDbDataAdapter da = null;
            try
            {
                conn = new OleDbConnection(strConn);
                conn.Open();
                cmd = new OleDbCommand("SELECT * FROM [" + workSheetName + "$]", conn);
                cmd.CommandType = CommandType.Text;
                wrtr = new StreamWriter(targetFile);
                da = new OleDbDataAdapter(cmd);
                DataTable dt = new DataTable();
                da.Fill(dt);
                for (int x = 0; x < dt.Rows.Count; x++)
                {
                    string rowString = "";
                    for (int y = 0; y < dt.Columns.Count; y++)
                    {
                        rowString += "\"" + dt.Rows[x][y].ToString() + "\",";
                    }
                    wrtr.WriteLine(rowString);
                }
                Console.WriteLine();
                Console.WriteLine("Done! Your " + SourceAppFilePath + " has been converted into " + targetFile + ".");
                Console.WriteLine();
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.ToString());
                Console.ReadLine();
            }
            finally
            {
                if (conn.State == ConnectionState.Open)
                    conn.Close();
                conn.Dispose();
                cmd.Dispose();
                da.Dispose();
                wrtr.Close();
                wrtr.Dispose();
            }
        }

XLS 文件正在转换为 csv。我可以在 for 循环中看到它wrtr.WriteLine(rowString); 但是我想在桌面位置看到最终输出文件“Data.csv”,因为我正在从桌面获取源 .xls 文件。给我一个解决方案。谢谢。

4

1 回答 1

1

您需要使用完整路径将文件保存到桌面。您可以使用 获取路径Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory,如下所示:

string targetFolder =  Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
string targetPath = Path.Combine(targetFolder, "Data.csv");

然后使用带有完整路径的 FileStream:

fs = new FileStream(targetPath, FileMode.Create);

根据下面的评论编辑

关键是指定要保存文件的路径。只需提供一个文件名,它就会放在应用程序正在执行的目录中。一个简单的方法是使用类的GetDirectoryName方法Path。假设文件被传入,从配置文件中读取,硬编码等:

字符串路径 = Path.GetDirectoryName(sourceFile); 字符串目标=路径+@“\”+“Data.csv”;

如果源文件是 C:\Data\Input.xml,那么路径将等于“C:\Data”,目标将是 C:\Data\Data.csv。

这里的好处是你可以传递一个带有路径的文件名,它总是将目标文件放在同一个位置。这很适合方法的参数化,甚至可能让用户通过 OpenFileDialog 框或类似机制选择文件。

根据约翰的评论进行附加编辑

根据您发布的代码,Data.xsl 文件位于执行应用程序的文件夹中。在这种情况下,您只需要执行以下操作:

fs = new FileStream("data.csv", FileMode.Create);

无需弄乱路径,因为文件流也将转到正在执行的应用程序的目录。

最后,这一切都是关于使用源文件中可用的信息(即位置/路径数据)并将其应用于目标文件的完整路径和名称。

于 2012-10-04T05:58:48.550 回答