2015-10-05 18 views
0

Я пишу приложение 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'.

Любые идеи будут оценены.

+0

Почему бы не написать код для обработки .csv? Это одни из самых простых файлов для работы (при условии, что они настроены хорошо). –

+0

Это тоже сработает. К сожалению, у меня была другая проблема. Одним из полей является столбец с текстовыми именами в них, и поэтому я получаю 'business, Inc.', который, конечно, меняется на два столбца вместо того, чтобы оставаться одним. Мне нужно поговорить с нашей командой данных, чтобы посмотреть, могут ли они добавлять двойные кавычки вокруг этого столбца или (еще проще для меня), если они могут экспортироваться как .xlsx. –

+0

* файл не может быть открыт, потому что его невозможно найти. * Это довольно понятный –

ответ

0

Итак, после небольшого исследования я нашел свою ошибку. Путь к файлу изменился, потому что была переименована папка .csv. При проверке правильности пути к файлу я смотрел в своем тестовом каталоге, а не на рабочем каталоге, поэтому все появилось правильно.

Это всегда мелочи ....

Смежные вопросы