2016-09-06 4 views
0

У меня есть каталог, содержащий 50 файлов DAT, один файл xlsx в каждом из них. Мне нужно сделать одну книгу с этими 50 DAT-файлами в виде отдельной рабочей таблицы в каждой папке в каталоге. Рабочий лист должен использовать столбцы 3,4,5 из файлов DAT, которые разделены вкладкой. Рабочий лист должен иметь 6 столбцов. Первые три будут взяты из базового xlsx-файла в каталоге. Столбец 4-6 должен иметь значения из столбца 3-5 из файлов .DAT. Я написал код в MATLAB, чтобы сделать это нужным. Каждый раз, когда я запускаю его, происходит сбой программы. Ошибка я получилПреобразование файлов Несколько файлов .DAT в одну рабочую книгу xlsx с разными листами

Ошибка при помощи xlswrite (строка 219) Invoke ошибка, отправка Исключение: Источник: Microsoft Excel Описание: Документ не сохранен. Файл справки: xlmain11.chm Help Context ID: 0.

Код выглядит следующим образом: В коде files_larswg является базовым файлом xlsx. Есть ли procesto исправить ошибку и сделать процесс пакетным процессом в случае, если у меня есть 10 похожих каталогов.

date=xlsread('files_larswg.xlsx',1,'A2:C18251'); 

header_tree={ 'da' , 'mo', 'year', 'tminC', 'tmaxC','prcpmm'}; 

for k=1:50 

k 

fileID =fopen(sprintf('FortWayneWG%d.dat',k+516)); 

data = textscan(fileID,'%*d %*d %f %f %f'); 

fclose(fileID); 

data=cell2mat(data); 

sheet_no=sprintf('sheet%d',k); 

xlswrite('FWYLARSWG_50set.xlsx', data, sheet_no,'D2:F18251'); 
xlswrite('FWYLARSWG_50set.xlsx', header_tree, sheet_no,'A1:F1'); 
xlswrite('FWYLARSWG_50set.xlsx', date, sheet_no,'A2:C18251'); 

конец

ответ

1

Каждый раз, когда вы используете xlswrite, что вы делаете, открывает экземпляр Excel, пытаясь записать все в файл, закрыть файл, а затем повторного открытия файла, чтобы сделать это снова. Ваша ОС является ошибкой (предполагая, что вы используете окна), потому что файл заблокирован в окнах.

Что вам нужно сделать, это использовать базовый ActiveXServer в Excel, написать все ваши вкладки в таблицу один раз, а затем сохранить это.

Ваш код должен широко читать что-то вроде этого.

Создайте объект excel и настройте новую новую книгу.

e = actxserver('Excel.Application'); 
e.Visible = 1; 
w=Add(e.Workbooks) 

Вы должны затем цикл над диапазоном данных и записывать данные в. Этот код добавит лист для каждого элемента в цикле, изменить SheetName, а затем создать следующий текст в каждой ячейке.

datasheet=Add(e.Sheets) 
datasheet.Name=sheetname(n) 
datasheet.Range('A1:B1').Value='test data or your range' 

Как только вы закончите цикл, сохраните файл и очистите свой объект excel.

w.SaveAs('myfile.xls') 
w.Saved = 1; 
w.Close; 
w.delete 

Вы должны следовать образцу этого example на страницу помощи Matlab, а также.

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

  • Нет связанных вопросов^_^