Код только преобразование последнего листа в CSV - PullRequest
0 голосов
/ 28 января 2019

Я написал программу на C #, которая должна конвертировать каждый лист в моей книге Excel в CSV и сохранять его в своих собственных файлах.У меня проблема в том, что когда я открываю каждый файл, все они имеют то же содержимое, что и самый последний лист.Вот мой код:

public void Main()
{
    Excel.Application excelApp = new Excel.Application();
    Excel.Workbook workbook = excelApp.Workbooks.Open(@"C:\Users\user\Desktop\Book1.xlsx");

    foreach (Excel.Worksheet sht in workbook.Worksheets)
    {
        sht.Select();
        System.Diagnostics.Debug.WriteLine(sht.Name.ToString());
        workbook.SaveAs(string.Format("{0}{1}.csv", @"C:\Users\user\Desktop\", sht.Name), Excel.XlFileFormat.xlCSV, Excel.XlSaveAsAccessMode.xlNoChange);
    }

    workbook.Close(false);

    Dts.TaskResult = (int)ScriptResults.Success;
}

Любая помощь будет отличной, спасибо!


Обновление 1

Не знаю, стоит ли упоминать, что яЯ пытаюсь сделать это с помощью задачи сценария в службах SSIS.Так что я запускаю только одну задачу сценария, содержащую приведенный выше код.

1 Ответ

0 голосов
/ 11 марта 2019

Попытка выяснить проблему

В обычных случаях предоставленный вами код будет работать отлично.Он может столкнуться с некоторой проблемой, если приложение Excel показало окно сообщения, нужны разрешения для включения редактирования, существуют проблемы с разрешениями для доступа к другим рабочим листам, поскольку они защищены ...

Прежде всего, откройтеExcel вручную и убедитесь, что вы можете получить доступ ко всем рабочим листам и выполнить операции сохранения вручную.Если вы не столкнулись с какой-либо проблемой, то при использовании библиотеки Interop.Excel не следует показывать в Excel окна сообщений или другие рекламные акции.

Кроме того, убедитесь, что Csv еще не существует в пути назначения.

Попробуйте использовать аналогичный код:

Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
excelApp.Visible = false;
excelApp.DisplayAlerts = false;

Microsoft.Office.Interop.Excel.Workbook workbook = excelApp.Workbooks.Open(@"D:\Book1.xlsx");
workbook.DoNotPromptForConvert = true;
workbook.CheckCompatibility = false;

foreach (Microsoft.Office.Interop.Excel.Worksheet sht in workbook.Worksheets)
{
    sht.Select();
    System.Diagnostics.Debug.WriteLine(sht.Name.ToString());

    if (System.IO.File.Exists(string.Format("{0}{1}.csv", @"D:\", sht.Name)))
    {
        System.IO.File.Delete(string.Format("{0}{1}.csv", @"D:\", sht.Name);

    }

    workbook.SaveAs(string.Format("{0}{1}.csv", @"D:\", sht.Name),
                                  Microsoft.Office.Interop.Excel.XlFileFormat.xlCSV, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange);
}

//workbook.Close(false);
workbook.Close(false, Type.Missing, Type.Missing);
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);

Я проверил следующеекод и он успешно преобразовал все рабочие листы.

...