C“运行/执行”;Excel到CSV文件转换器“;来自C#WinForm应用程序的控制台应用程序
我正在使用C#开发一个WinForms应用程序,带有OpenFileDialog、FileBrowserDialog,并且我已经启用了多个xls文件的选择,我希望:C“运行/执行”;Excel到CSV文件转换器“;来自C#WinForm应用程序的控制台应用程序,c#,winforms,error-handling,console-application,C#,Winforms,Error Handling,Console Application,我正在使用C#开发一个WinForms应用程序,带有OpenFileDialog、FileBrowserDialog,并且我已经启用了多个xls文件的选择,我希望: 将所选文件复制到合并目录 通过命令提示符命令[C:\CommissionRecon\ConvertExcel\ConvertExcelTo.exe ^xxxxx.xls^xxxx.csv]将所选文件转换为.csv文件 使用命令提示符将所有.csv文件合并为1个csv文件 [.csv文件位置:复制*.csv^filename.csv]
// Select Source Files Button
private void sourceFiles_Click(object sender, EventArgs e)
{
Stream myStream = null;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
this.sourceFileOpenFileDialog.InitialDirectory = "i:\\CommissisionReconciliation\\Review\\";
this.sourceFileOpenFileDialog.Filter = "Excel Files (*.xls;*.xlsx;)|*.xls;*.xlsx;|All Files (*.*)|*.*";
this.sourceFileOpenFileDialog.FilterIndex = 2;
this.sourceFileOpenFileDialog.RestoreDirectory = true;
this.sourceFileOpenFileDialog.Multiselect = true;
this.sourceFileOpenFileDialog.Title = "Excel File Browser";
DialogResult dr = this.sourceFileOpenFileDialog.ShowDialog();
if (dr == System.Windows.Forms.DialogResult.OK)
{
string consolidatedFolder = targetFolderBrowserDialog.SelectedPath;
// Read the files
foreach (String file in sourceFileOpenFileDialog.FileNames)
{
try
{
// Copy each selected xlsx files into the specified TargetFolder
System.IO.File.Copy(fileName, consolidatedFolder + @"\" + System.IO.Path.GetFileName(fileName));
// Convert each selected XLSX File to CSV Using the command prompt
// [I:\CommissisionReconciliation\App\ConvertExcel\ConvertExcelTo.exe ^ .XLS file location ^ filename.csv]
// example: ConvertExcelTo.exe ^ I:\CommissisionReconciliation\ Review\_Consolidated\ALH\2011-350-00-600070-
// 03-09alh-AMLHS of Florida.xlsx ^ 2011-350-00-600070-03-09alh-AMLHS of Florida.csv
Process covertFilesProcess = new Process();
covertFilesProcess.StartInfo.WorkingDirectory = "I:\\CommissisionReconciliation\\App\\ConvertExcel\\";
covertFilesProcess.StartInfo.FileName = sourceFileOpenFileDialog.FileName;
covertFilesProcess.StartInfo.Arguments = "ConvertExcelTo.exe" + " ^ " + targetFolderBrowserDialog.SelectedPath + "^" + sourceFileOpenFileDialog.FileName + ".csv";
covertFilesProcess.StartInfo.UseShellExecute = false;
covertFilesProcess.StartInfo.CreateNoWindow = true;
covertFilesProcess.StartInfo.RedirectStandardOutput = true;
covertFilesProcess.StartInfo.RedirectStandardError = true;
covertFilesProcess.Start();
StreamReader sOut = covertFilesProcess.StandardOutput;
StreamReader sErr = covertFilesProcess.StandardError;
}
catch (SecurityException ex)
{
// The user lacks appropriate permissions to read files, discover paths, etc.
MessageBox.Show("Security error. The user lacks appropriate permissions to read files, discover paths, etc. Please contact your administrator for details.\n\n" +
"Error message: " + ex.Message + "\n\n" +);
}
catch (Exception ex)
{
// Could not load the image - probably related to Windows file system permissions.
MessageBox.Show("Cannot display the image: " + file.Substring(file.LastIndexOf('\\'))
+ ". You may not have permission to read the file, or " +
"it may be corrupt.\n\nReported error: " + ex.Message);
}
finally
{
sOut.Close();
sErr.Close();
}
try
{
// Combine all .csv files into 1 csv file using the command prompt
// [.csv File location: Copy *.csv ^ filename.csv]
// example: [.CSV I:\CommissisionReconciliation\ Review\_Consolidated\ALH\: Copy *.csv
// ^2011-350-00-600070-03-09alh-AMLHS of Florida.csv)
Process consolidateFilesProcess = new Process();
// substring function to take off the extension from sourceFileOpenFileDialog.FileName
// int csvFileName.Length = sourceFileOpenFileDialog.FileName.Length - 3;
consolidateFilesProcess.StartInfo.WorkingDirectory = "I:\\CommissisionReconciliation\\App\\ConvertExcel\\";
consolidateFilesProcess.StartInfo.FileName = sourceFileOpenFileDialog.FileName;
consolidateFilesProcess.StartInfo.Arguments = ".CSV " + " ^ " + targetFolderBrowserDialog.SelectedPath + ": Copy *.csv ^" + csvFileName+ ".csv";
consolidateFilesProcess.StartInfo.UseShellExecute = false;
consolidateFilesProcess.StartInfo.CreateNoWindow = true;
consolidateFilesProcess.StartInfo.RedirectStandardOutput = true;
consolidateFilesProcess.StartInfo.RedirectStandardError = true;
consolidateFilesProcess.Start();
StreamReader sOut = consolidateFilesProcess.StandardOutput;
StreamReader sErr = consolidateFilesProcess.StandardError;
}
catch (SecurityException ex)
{
// The user lacks appropriate permissions to read files, discover paths, etc.
MessageBox.Show("Security error. The user lacks appropriate permissions to read files, discover paths, etc. Please contact your administrator for details.\n\n" +
"Error message: " + ex.Message + "\n\n" +);
}
catch (Exception ex)
{
// Could not load the image - probably related to Windows file system permissions.
MessageBox.Show("Cannot display the image: " + file.Substring(file.LastIndexOf('\\'))
+ ". You may not have permission to read the file, or " +
"it may be corrupt.\n\nReported error: " + ex.Message);
}
finally
{
sOut.Close();
sErr.Close();
}
} // ends foreach (String file in openFileDialog1.FileNames)
} // ends if (dr == System.Windows.Forms.DialogResult.OK)
} // ends selectFilesButton_Click method
if (sourceFileOpenFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
if ((myStream = sourceFileOpenFileDialog.OpenFile()) != null)
{
using (myStream)
{
textBoxSourceFiles.Text = sourceFileOpenFileDialog.FileNames;
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
}
}
if (sourceFileOpenFileDialog.ShowDialog() == DialogResult.OK)
{
Log("Source Files: " + sourceFileOpenFileDialog.SelectedFiles);
}
textBoxSourceFiles.Text = sourceFileOpenFileDialog.SelectedFiles;
}
创建ProcessSTartInfo时,需要指定要作为文件名运行的进程的可执行性 例如:
Process covertFilesProcess = new Process();
covertFilesProcess.StartInfo.WorkingDirectory = "I:\\CommissisionReconciliation\\App\\ConvertExcel\\";
covertFilesProcess.StartInfo.FileName = "ConvertExcelTo.exe";
covertFilesProcess.StartInfo.Arguments = "^ " + targetFolderBrowserDialog.SelectedPath + "^" + sourceFileOpenFileDialog.FileName + ".csv";
covertFilesProcess.StartInfo.UseShellExecute = true;
covertFilesProcess.StartInfo.CreateNoWindow = true;
covertFilesProcess.StartInfo.RedirectStandardOutput = true;
covertFilesProcess.StartInfo.RedirectStandardError = true;
covertFilesProcess.Start();
StreamReader sOut = covertFilesProcess.StandardOutput;
StreamReader sErr = covertFilesProcess.StandardError;
首先:
try
{
...
StreamReader sOut = covertFilesProcess.StandardOutput;
}
sOut.close();
sOut在try块内部声明-在外部不可见。你需要把它移到外面去
StreamReader sOut = null;
try
{
...
sOut = covertFilesProcess.StandardOutput;
}
if (sOut != null) sOut.Close();
与sErr相同
更新:对于SecurityException,您需要使用System.Security添加;对于Process,您需要使用System.Diagnostics添加。而且变量fileName没有声明-因此编译器不知道它是什么。不要使用
//ends foreach(…)
你应该将这些代码块重构成单独的方法,这样foreach
就可以在一个屏幕上显示。@gaearon,对不起,我不知道你的意思。您能提供一个例子吗?在结束大括号处,您可以添加注释,指定哪个是开始大括号(例如,//ends if(dr==System.Windows.Forms.DialogResult.OK)
)。这是一种不好的样式,因为它表明您的代码块足够长,因此无法在屏幕上显示。这样的代码很难阅读和维护。通常,如果将部分代码提取到单独的方法中,代码看起来会更好。例如,您可以创建一个StartConverter
方法并在循环中调用它。感谢您的回复!我试试看!我应该使用指令或程序集引用添加什么来防止这些错误??'找不到文件名“”(是否缺少using指令或程序集引用?)找不到进程“”(是否缺少using指令或程序集引用?)找不到SecurityException“”(是否缺少using指令或程序集引用?)“sOut”在当前上下文中不存在“sErr”在当前上下文中不存在context@Frank海尔,谢谢你的回复。你在这里的代码中编辑了什么?关于如何修复我的错误,您有什么补充吗?关于字符串directoryPath=Path.GetDirectoryName(filePath)?谢谢你的回复。在您给我的代码下,我应该在“StreamReader sOut=null;try{…sOut=…}”下放置什么来代替“…”?我已经在上面的代码中声明了sOut&sErr变量,如下所示:“StreamReader sOut=covertfileprocess.StandardOutput;StreamReader sErr=covertfileprocess.StandardError;”这就是你说的。。。而sOut=?使用sOut=…
我想指示类似sOut=CovertFileProcess.StandardOutput的赋值。我更新了答案。