Я пишу приложение C# WinForms в Microsoft Visual Studio. Наша команда Data дает мне ежедневный отчет в формате .csv, и мне нужно визуально отображать результаты. Однако эта программа изначально была написана для обработки файлов .xlsx, поэтому вместо того, чтобы переписывать весь мой код для обработки .csv, я решил, что было бы проще преобразовать файл в .xlsx, а затем оставить остальную часть кода, как и ,C# Excel Interop _Workbooks.Open
Итак, я изменил первую часть моего метода drawCharts(), который отвечает за сбор информации из xlsx и рендеринг ее в качестве диаграмм Excel.
Мое исследование показало мне два способа чтения внешних файлов в книгу Excel, в первую очередь с помощью Workbooks.Open, вторая с помощью Workbooks.OpenText.
Вот мой код:
private void drawCharts()
{
//Declare variables for use
//These first three values are going to be used later and can be ignored.
Excel.Application xlApp = null;
Excel.Workbook xlWorkbook = null;
Excel.Worksheet xlWorksheet = null;
object misValue = System.Reflection.Missing.Value;
string path = "\\\\Data\\Departmental Data\\TechSupport\\_Report"
//define the actual file path. Separate because I use the path variable elsewhere
string source = Path.Combine(path, "report.csv");
//define the destination file. Using Environment.UserName so multiple people can run this program at the same time, all using unique files except when they first load. There's probably a better way of doing this.
string use = Path.Combine(path, "Report-" + Environment.UserName + ".xlsx");
//A boolean telling the program to exit if there was an error
bool shouldExit = false;
Excel.Application app = null; //Temporary application used for opening the csv
try
{
MessageBox.Show("Opening file " + source);
app = new Excel.Application();
Excel.Workbook wb = app.Workbooks.Open(source); //source points to the csv. This is the line that fails.
MessageBox.Show(String.Format("Saving {0} as {1}", source, use));
wb.SaveAs(use, Excel.XlFileFormat.xlOpenXMLWorkbook);
wb.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
shouldExit = true;
}
finally
{
if (app != null) { app.Quit(); }
releaseObject(app);
if (shouldExit) { Environment.Exit(1); }
}
//Rest of the code...
}
Нарушитель линия является Excel.Workbook wb = app.Workbooks.Open(source);
. Когда эта строка выполняется, Excel выдает сообщение об ошибке, указывающее, что файл не может быть открыт, потому что его невозможно найти. Исследуя это, я нашел this article, который сказал, что должен изменить его на Excel.Workbook wb = app.Workbooks.OpenText(source)
. Однако это приводит к ошибке компилятора, указывающей Cannot implicitly convert type 'void' to 'Microsoft.Office.Interop.Excel.Workbook'
.
Любые идеи будут оценены.
Почему бы не написать код для обработки .csv? Это одни из самых простых файлов для работы (при условии, что они настроены хорошо). –
Это тоже сработает. К сожалению, у меня была другая проблема. Одним из полей является столбец с текстовыми именами в них, и поэтому я получаю 'business, Inc.', который, конечно, меняется на два столбца вместо того, чтобы оставаться одним. Мне нужно поговорить с нашей командой данных, чтобы посмотреть, могут ли они добавлять двойные кавычки вокруг этого столбца или (еще проще для меня), если они могут экспортироваться как .xlsx. –
* файл не может быть открыт, потому что его невозможно найти. * Это довольно понятный –