QuickScript .NET — различия между версиями
Admin (обсуждение | вклад) (Создана новая страница размером == Работа с MS Excel == Самым "верхним" объектом в Excel является объект '''Application'''. Э...) |
Admin (обсуждение | вклад) (→Работа с MS Excel) |
||
Строка 19: | Строка 19: | ||
Доступ к книге можно получить по индексу и по имени книги. Имя книги - это имя файла, в котором она хранится. Fullname содержит полное имя, название файла и путь, а Name - только имя. | Доступ к книге можно получить по индексу и по имени книги. Имя книги - это имя файла, в котором она хранится. Fullname содержит полное имя, название файла и путь, а Name - только имя. | ||
+ | |||
+ | Dim app As Object; | ||
+ | |||
+ | Dim wb As Object; | ||
+ | |||
+ | Dim ws As Object; | ||
+ | |||
+ | |||
+ | |||
+ | app = CreateObject("Excel.Application"); | ||
+ | |||
+ | LogMessage("Before wb add"); | ||
+ | |||
+ | wb = app.Workbooks.Add(); | ||
+ | |||
+ | LogMessage("After wb add"); | ||
+ | |||
+ | LogMessage("before activesheet add"); | ||
+ | |||
+ | ws = wb.ActiveSheet; | ||
+ | |||
+ | LogMessage("After activesheet add"); | ||
+ | |||
+ | LogMessage("get range A1"); | ||
+ | |||
+ | ws.Range("A1").Value = 1000; | ||
+ | |||
+ | LogMessage("get range A2"); | ||
+ | |||
+ | ws.Range("A2").Value = 1000; | ||
+ | |||
+ | LogMessage("get range A3"); | ||
+ | |||
+ | ws.Range("A3").Value = "=A1+A2"; | ||
+ | LogMessage(ws.Range("A3").Value); | ||
+ | LogMessage("close"); | ||
+ | |||
+ | wb.SaveAs("c:\temp\Book1.xlsx"); | ||
+ | LogMessage("saved"); | ||
+ | wb.Close(false); | ||
+ | |||
+ | |||
+ | LogMessage("2"); | ||
+ | System.Runtime.InteropServices.Marshal.ReleaseComObject(ws ); | ||
+ | |||
+ | System.Runtime.InteropServices.Marshal.ReleaseComObject(wb); | ||
+ | |||
+ | app.Quit(); | ||
+ | |||
+ | System.Runtime.InteropServices.Marshal.ReleaseComObject(app); | ||
+ | |||
+ | System.GC.Collect(); | ||
+ | LogMessage("2 end"); |
Версия 09:37, 9 сентября 2013
Работа с MS Excel
Самым "верхним" объектом в Excel является объект Application. Это объект приложение. И этот объект содержит ряд коллекций. Коллекция в VBA - это что-то вроде массива, только элементы в нее можно добавлять и удалять во время выполнения программы. Рабочие книги Excel входят в коллекцию Workbooks. Чтобы узнать количество открытых книг, используется метод Workbooks.Count.
Добавить новую книгу можно вызвав метод Workbooks.Add(). В качестве параметра этому методу можно передать имя шаблона, на основе которого будет создаваться новая книга. Чтобы открыть существующий файл Excel, вызывается метод Workbooks.Open("file.xls") - в результате будет открыт файл file.xls.
Закрыть книгу можно так: Workbooks(1).Close, или так: Workbooks("Книга1").Close, или закрыть все книги сразу: Workbooks.Close. Метод Close имеет ряд необязательных параметров. Вот они. expression.Close(SaveChanges, FileName, RouteWorkbook) Первый параметр SaveChanges имеет тип BOOL, если он равен TRUE, сделанные изменения сохранятся, если FALSE - то нет. Если параметр не задан, то при закрытии появляется диалоговое окно с вопросом о необходимости сохранения. Save changes ?
К книгам в коллекции можно обращаться через метод Item():
Sub Test()
s1 = Application.Workbooks.Item(1).Name s2 = Application.Workbooks.Item("book.xls").FullName
End Sub
Доступ к книге можно получить по индексу и по имени книги. Имя книги - это имя файла, в котором она хранится. Fullname содержит полное имя, название файла и путь, а Name - только имя.
Dim app As Object;
Dim wb As Object;
Dim ws As Object;
app = CreateObject("Excel.Application");
LogMessage("Before wb add");
wb = app.Workbooks.Add();
LogMessage("After wb add");
LogMessage("before activesheet add");
ws = wb.ActiveSheet;
LogMessage("After activesheet add");
LogMessage("get range A1");
ws.Range("A1").Value = 1000;
LogMessage("get range A2");
ws.Range("A2").Value = 1000;
LogMessage("get range A3");
ws.Range("A3").Value = "=A1+A2"; LogMessage(ws.Range("A3").Value); LogMessage("close");
wb.SaveAs("c:\temp\Book1.xlsx"); LogMessage("saved"); wb.Close(false);
LogMessage("2");
System.Runtime.InteropServices.Marshal.ReleaseComObject(ws );
System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
System.GC.Collect(); LogMessage("2 end");