C#, выполняемый через оболочку из VBA, не создает файл
Предыстория: я получил огромную стену sql-кода из программы, которую я хочу использовать для сброса данных в excel. Выполнение этого кода из VBA приводит к большому количеству ошибок, и кусок кода слишком велик и запутан, чтобы пройти через него.
Запуск запроса на C# работает нормально, поэтому я написал программу, которая захватывает данные и сбрасывает их в файл, который я называю excelDump. csv
Для удобства использования, чтобы избежать необходимости запускать эту программу отдельно, я вызываю программу через макрос vba. Как только программа выполнена, я хватаю (в vba) данные в dumb и заполняю свой лист excel.
Вызывается программа c#, консоль показывает все, что я хочу, она закрывается с правильным кодом выхода, и я подтверждаю этот код в VBA, прежде чем пытаться открыть дамп.
Вот код, который я запускаю в C#
public void DumpToExcel()
{
using (System.IO.StreamWriter fs = new System.IO.StreamWriter("excelDump.csv"))
{
// Loop through the fields and add headers
for (int i = 0; i < myReader.FieldCount; i++)
{
string name = myReader.GetName(i);
if (name.Contains(","))
name = "\"" + name + "\"";
fs.Write(name + ",");
}
fs.WriteLine();
// Loop through the rows and output the data
while (myReader.Read())
{
for (int i = 0; i < myReader.FieldCount; i++)
{
string value = myReader[i].ToString();
if (value.Contains(","))
value = "\"" + value + "\"";
fs.Write(value + ",");
}
fs.WriteLine();
}
fs.Close();
}
}
Что я уже пробовал:
Сначала я подумал, что проблема в том, что программа не может перезаписать файл, поэтому я попытался удалить его, но не смог. Программа отлично работает, когда я запускаю ее из visual studio или выпускаю сборку из exe. Но вызов его из оболочки не создает новый файл. Использовать файл.удалить можно удалить старый просто отлично.
Я подумал, что, может быть, программа c# быстро завершает работу до того, как файлы будут созданы, но я ждал, прежде чем импортировать данные, и все равно ничего.
Bernhard Hiller
Что такое "myReader"? Пытается ли он прочитать файл Excel, содержащий макрос?
Member 11683251
OdbcDataReader myReader;
Он запускает SQL-запрос. Эти программы захватывают данные из sql и дампов в excel. Другой excel импортирует эти данные в себя. Я вызываю эту программу из программы импорта excel через оболочку.
Bernhard Hiller
Что происходит, когда вы заменяете "excelDump. csv" на полный путь (например, "c:\\temp\\excelDump.csv")? Возможно, возникла проблема с "текущим рабочим каталогом".
Member 11683251
Это, кажется, работает, файлы были созданы, и в них есть правильные данные.
Большое спасибо! Опубликуйте это как ответ, и я приму его. :)