Очень нужна помощь в C# SaveAs Excel как CSV и раздел. ";"
От: Аноним  
Дата: 12.11.05 23:50
Оценка:
Добрых суток.
Помогите pliz сохранить файл Excel как CSV с разделителем ";" а не "," через API C#-а. Целый день бьюсь над это проблемой.
Если в Excel-е выбрать сохранить файл как CSV MSDOS (может и др. не знаю), то в CSV файле разделителями являются ";", а вот через C# ","
Уже и VB макрос записывал сохранения файла. Во время записи макроса создаётся файл такой, как мне надо, а потом, во время выполнения макроса, создаётся CSV, где разделители ",".
Нашёл в инете VB код (http://book.itzero.com/read/others/Apress.Definitive.Guide.to.Excel.VBA.Second.Edition.eBook-LiB_html/8218final/LiB0043.html найти Saving Data in Text Format), который обходит все ячейки и печатает в своём формате, но тут у меня возникла др. проблема: worksheet.Rows.Count имеет значение 65535, а при сохранении в файл значительно меньше (13).
Может кто знает как решить какую-нить из этих проблем.
Огромное спасибо.
Владимир.
Re: Очень нужна помощь в C# SaveAs Excel как CSV и раздел. "
От: v0l0d  
Дата: 13.11.05 00:44
Оценка:
Здравствуйте, Аноним, Вы писали:

кажется нашёл решение через:

string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source = C:\\base.xls;" + "Extended Properties=Excel 8.0;";
OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM[Лист1$]", strConn);
OleDbConnection conn = new OleDbConnection(strConn);
DataSet myDataSet = new DataSet();
myCommand.Fill(myDataSet);
Владимир.
Re[2]: Очень нужна помощь в C# SaveAs Excel как CSV и раздел
От: v0l0d  
Дата: 14.11.05 00:26
Оценка:
Здравствуйте, v0l0d, Вы писали:

V>Здравствуйте, Аноним, Вы писали:


V>кажется нашёл решение через:


V>string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +

V> "Data Source = C:\\base.xls;" + "Extended Properties=Excel 8.0;";
V>OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM[Лист1$]", strConn);
V>OleDbConnection conn = new OleDbConnection(strConn);
V>DataSet myDataSet = new DataSet();
V>myCommand.Fill(myDataSet);

Вот... блин...
Вроде бы всё было хорошо, но почему то таким спобосом теряются некоторые данные. Как я заметил те, что занимают несколько строк, но не все.
Может есть проще способ экспортировать данные в CSV файл с разделителем: ";"?
Спасибо!
Владимир.
Re: Очень нужна помощь в C# SaveAs Excel как CSV и раздел. "
От: Andrbig  
Дата: 14.11.05 06:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрых суток.

А>Помогите pliz сохранить файл Excel как CSV с разделителем ";" а не "," через API C#-а. Целый день бьюсь над это проблемой.
А>Если в Excel-е выбрать сохранить файл как CSV MSDOS (может и др. не знаю), то в CSV файле разделителями являются ";", а вот через C# ","
А>Уже и VB макрос записывал сохранения файла. Во время записи макроса создаётся файл такой, как мне надо, а потом, во время выполнения макроса, создаётся CSV, где разделители ",".
А>Нашёл в инете VB код (http://book.itzero.com/read/others/Apress.Definitive.Guide.to.Excel.VBA.Second.Edition.eBook-LiB_html/8218final/LiB0043.html найти Saving Data in Text Format), который обходит все ячейки и печатает в своём формате, но тут у меня возникла др. проблема: worksheet.Rows.Count имеет значение 65535, а при сохранении в файл значительно меньше (13).
А>Может кто знает как решить какую-нить из этих проблем.
А>Огромное спасибо.

Из excel разделители управляются из Control Panel | Regional Options | Customize | List Separator. Из api — не смотрел, может так же (через культуру).
Re[2]: Очень нужна помощь в C# SaveAs Excel как CSV и раздел
От: Аноним  
Дата: 14.11.05 01:13
Оценка:
Проще — только перебором ячеек и выводом содержимого в нужном формате. Правда, может оказаться медленно.
----
В моём WMP Плагины для Офиса


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: Очень нужна помощь в C# SaveAs Excel как CSV и раздел
От: v0l0d  
Дата: 14.11.05 15:13
Оценка:
Здравствуйте, Andrbig, Вы писали:

A>Из excel разделители управляются из Control Panel | Regional Options | Customize | List Separator. Из api — не смотрел, может так же (через культуру).

Надо будет попробовать. Спасибо.
Владимир.
Re[3]: Очень нужна помощь в C# SaveAs Excel как CSV и раздел
От: v0l0d  
Дата: 14.11.05 15:39
Оценка:
Здравствуйте, Dkm_S, Вы писали:

D_S>Проще — только перебором ячеек и выводом содержимого в нужном формате. Правда, может оказаться медленно.


D_S>
данное сообщение получено с www.gotdotnet.ru

D_S>ссылка на оригинальное сообщение

я пробовал перебором, но Columns.Count и Rows.Cound в worksheet-е выдавали не реально большие значения 65535 и что=то за 200.
Владимир.
Re[4]: Очень нужна помощь в C# SaveAs Excel как CSV и раздел
От: v0l0d  
Дата: 15.11.05 15:07
Оценка:
Здравствуйте, v0l0d, Вы писали:

V>Здравствуйте, Dkm_S, Вы писали:


D_S>>Проще — только перебором ячеек и выводом содержимого в нужном формате. Правда, может оказаться медленно.


D_S>>
данное сообщение получено с www.gotdotnet.ru

D_S>>ссылка на оригинальное сообщение

V>я пробовал перебором, но Columns.Count и Rows.Cound в worksheet-е выдавали не реально большие значения 65535 и что=то за 200.
V>
Понял как это побороть: worksheet.usedRange надо использовать
Но тормозить!!! ужас!
Владимир.
Re: Очень нужна помощь в C# SaveAs Excel как CSV и раздел. "
От: Red Bird Россия  
Дата: 15.11.05 15:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрых суток.

[skip]
А>Уже и VB макрос записывал сохранения файла. Во время записи макроса создаётся файл такой, как мне надо, а потом, во время выполнения макроса, создаётся CSV, где разделители ",".
[skip]
А>Огромное спасибо.
А>Владимир.

Приведите текст макроса, который формирует Excel.
Re[2]: Очень нужна помощь в C# SaveAs Excel как CSV и раздел
От: v0l0d  
Дата: 16.11.05 00:29
Оценка:
Здравствуйте, Red Bird, Вы писали:

RB>Приведите текст макроса, который формирует Excel.


Sub saveas()
ActiveWorkbook.saveas Filename:= _
"C:\tmp\excel.csv" _
, FileFormat:=xlCSVMSDOS, CreateBackup:=False
End Sub

собственно ничего военного. создаётся впечатление, что происходит ещё что-то, что не улавливает "Record new macro".
Владимир.
Re[5]: Очень нужна помощь в C# SaveAs Excel как CSV и раздел
От: v0l0d  
Дата: 16.11.05 01:33
Оценка:
Здравствуйте, v0l0d, Вы писали:

V>Понял как это побороть: worksheet.usedRange надо использовать

V>Но тормозить!!! ужас!
Что-то никак не доберусь до красивого, ну или хотя бы работающего правильно на 100% варианта.
Используя этот метод (через UsedRange) появились грабли с датами. Они стали выдаваться как double ( :-E
И никак не могу найти: как правильно отформатировать дату...

За то нашёл более быстрый способ обхода ячеек
                object[,] values = (object[,]) usedRange.Value2;
                for (int i = 0; i < values.GetLength(0); i++) {
                    for (int j = 0; j < values.GetLength(1); j++) {
                        object o = values[i + 1, j + 1];
                        if (o != null) {
                            string value = o.ToString();
                        }
                    }
                }

Скорость раз... в 10 больше
единственное надо делать проверку на размер usedRange (состоит из одной ячейки или вообще пустой)
Владимир.
Re[3]: Очень нужна помощь в C# SaveAs Excel как CSV и раздел
От: Red Bird Россия  
Дата: 16.11.05 07:38
Оценка:
Здравствуйте, v0l0d, Вы писали:

V>Здравствуйте, Red Bird, Вы писали:



V>собственно ничего военного. создаётся впечатление, что происходит ещё что-то, что не улавливает "Record new macro".


А можно выложить текст на C#?
Попробую воспроизвести у себя.
Re[4]: Очень нужна помощь в C# SaveAs Excel как CSV и раздел
От: v0l0d  
Дата: 16.11.05 14:21
Оценка:
Здравствуйте, Red Bird, Вы писали:
RB>А можно выложить текст на C#?
RB>Попробую воспроизвести у себя.


                        app = new ApplicationClass();
                        app.Visible = false;
                        object delimiter = "";
                        Workbook workbook = app.Workbooks.Open(@"C:\excel.xls",
                                                                       Type.Missing,
                                                                       true,
                                                                       Type.Missing,
                                                                       Type.Missing,
                                                                       Type.Missing,
                                                                       Type.Missing,
                                                                       Type.Missing,
                                                                       delimiter,
                                                                       Type.Missing,
                                                                       Type.Missing,
                                                                       Type.Missing,
                                                                       Type.Missing,
                                                                       Type.Missing,
                                                                       Type.Missing);

                        object saveFormat = XlFileFormat.xlXMLSpreadsheet;
                        Worksheet worksheet = (Worksheet) workbook.Worksheets.get_Item(1);
                               worksheet.SaveAs(@"C:\csv_file.csv",
                                                 saveFormat,
                                                 Missing.Value,
                                                 Missing.Value,
                                                 true,
                                                 false,
                                                 //XlSaveAsAccessMode.xlExclusive,
                                                 Missing.Value,
                                                 Missing.Value,
                                                 Missing.Value,
                                                 //Missing.Value,
                                                 Missing.Value);
                        workbook.Close(false, Type.Missing, Type.Missing);
                        app.Quit();

кажется ничего не упустил
Владимир.
Re[5]: Очень нужна помощь в C# SaveAs Excel как CSV и раздел
От: Red Bird Россия  
Дата: 16.11.05 15:35
Оценка:
Здравствуйте, v0l0d, Вы писали:

V>Здравствуйте, Red Bird, Вы писали:

RB>>А можно выложить текст на C#?
RB>>Попробую воспроизвести у себя.


V>
V>                        object saveFormat = XlFileFormat.xlXMLSpreadsheet;
V>                        Worksheet worksheet = (Worksheet) workbook.Worksheets.get_Item(1);
V>                               worksheet.SaveAs(@"C:\csv_file.csv",
V>                                                 saveFormat,
V>                                                 Missing.Value,
V>                                                 Missing.Value,
V>                                                 true,
V>                                                 false,
V>                                                 //XlSaveAsAccessMode.xlExclusive,
V>                                                 Missing.Value,
V>                                                 Missing.Value,
V>                                                 Missing.Value,
V>                                                 //Missing.Value,
V>                                                 Missing.Value);
V>                        workbook.Close(false, Type.Missing, Type.Missing);
V>                        app.Quit();
V>

V>кажется ничего не упустил

Наверное, все-таки должно быть:

object saveFormat = XlFileFormat.xlCSV;
Re[6]: Очень нужна помощь в C# SaveAs Excel как CSV и раздел
От: v0l0d  
Дата: 16.11.05 15:50
Оценка:
Здравствуйте, Red Bird, Вы писали:

RB>Наверное, все-таки должно быть:


RB>
RB>object saveFormat = XlFileFormat.xlCSV;
RB>


я уже всё перепробовал %))
Пока обход через ячейки единственный способ...
Владимир.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.