Войти

Показать полную графическую версию : [решено] копирование столбца из excel в другой excel


Страниц : [1] 2

romfus
10-05-2018, 11:15
Добрый день имеются множество файлов ( пример прикрепил ). Можно ли как то из этих всех файлов вырезать только один столбец (NUM ) И чтоб нумерация из этих столбцов была полностью видна. То есть при нажатии скриптов создавались бы excel файлы только с Num столбцами. Эти файлы лежат на D:\Новая папка а экспорт новых excel файлов например на D:\Новая папка2

romfus
10-05-2018, 11:17
Вот сам файл

Iska
10-05-2018, 11:34
имеются множество файлов ( пример прикрепил ). »
Если речь ведётся о «множестве», лучше сразу давать два-три файла, а не один, дабы было с чем работать.

Можно ли как то из этих всех файлов вырезать только один столбец (NUM ) И чтоб нумерация из этих столбцов была полностью видна. То есть при нажатии скриптов создавались бы excel файлы только с Num столбцами. Эти файлы лежат на D:\Новая папка а экспорт новых excel файлов например на D:\Новая папка2 »
Можно. Только не на пакетных файлах, а посредством чего0либо, поддерживающего Automation — WSH, PowerShell, AutoIt и т.п.

А какова цель сего действа? Вот мы удалили из листа Рабочей книги все столбцы, кроме num, выровняли его, сохранили под тем же именем в конечный каталог. Затем другую Рабочую книгу, третью… А что дальше?

romfus
10-05-2018, 11:43
Да просто этих файлов у меня штук 100. и так каждый открывать удалять на это времени много уходит. Просто мне нужно этот Num столбец потом будет еще распечатать. Проще ж потом выделить сформированные файлы и все разом пустить на печать а не открывать каждый потом удалять потом на печать. Вот вам 2 файл для примера.

romfus
10-05-2018, 11:44
Да и мне нужно чтобы оригинал файла сохранился. Хотя знаете можно просто тогда удалить из оригинала и все. Я если что найду способ как оригиналы найти

Iska
10-05-2018, 14:54
romfus, ну, пробуйте (на WSH):
Option Explicit

Dim strSourceFolder
Dim strDestFolder

Dim objFSO
Dim objFile

Dim objExcel


strSourceFolder = "C:\Мои проекты\0155\Source"
strDestFolder = "C:\Мои проекты\0155\Destination"

Set objExcel = Nothing

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strSourceFolder) Then
If objFSO.FolderExists(strDestFolder) Then
For Each objFile In objFSO.GetFolder(strSourceFolder).Files
Select Case LCase(objFSO.GetExtensionName(objFile.Name))
Case "xls", "xlsx"
If objExcel Is Nothing Then
Set objExcel = WScript.CreateObject("Excel.Application")
End If

With objExcel
With .Workbooks.Open(objFile.Path)
With .Worksheets.Item(1)
If StrComp(.Cells(1, 1).Value, "num", vbTextCompare) = 0 Then
With .UsedRange.EntireColumn
.Offset(0, 1).Delete
.AutoFit
End With
Else
WScript.Echo "Can't find [num] in A1 cell in first worksheet in [" & objFile.Name & "] workbook."
End If
End With

.SaveAs objFSO.BuildPath(strDestFolder, objFile.Name)
.Close
End With
End With
Case Else
' Nothing to do
End Select
Next

objExcel.Quit

Set objExcel = Nothing
Else
WScript.Echo "Can't find destination folder [" & strDestFolder & "]."
WScript.Quit 2
End If
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0

Но у меня возник вопрос — вот, Вы распечатываете результирующие Рабочие книги. И только? А потом они Вам не требуются, и Вы их удаляете? Если так, то вовсе нет никакой нужды в сохранении Рабочих книг: можно удалить все столбцы, кроме num, подогнать ширину столбца num по содержимому, отправить результат на печать и закрыть Рабочую книгу, никуда не сохраняя :). Как Вам такое? Или же Вы там ещё каким-то хитрым образом подгоняете, масштабируете, соединяете результирующие данные?

romfus
10-05-2018, 15:05
Что-то не запускается скрипт. Как его запустить? Дак нам приходит ежедневно по 100 таких файлов. Это ж нужно каждый так открывать удалять печатать и т д

А все . Работает. А вот такой вопрос. А нельзя ли чтобы столбец NUM шел не просто вниз а по всему листу?. ПРи печати хорошая Экономия бумаги получится. То что я вам кинул это самый маленький файл. Так если на печатаь бросать результат получается на 8 листов аж

Iska
10-05-2018, 15:21
Что-то не запускается скрипт. Как его запустить? »
Сохранить код в файл с расширением .vbs, указав свои пути к исходному и целевому каталогам. Запустить двойным щелчком.

Дак нам приходит ежедневно по 100 таких файлов. Это ж нужно каждый так открывать удалять печатать и т д »
Так я и предлагаю: если Вы только печатаете результирующие Рабочие книги, и ничего больше — сделать так, чтобы Вам не приходилось каждую исправленную Рабочую книгу открывать, печатать и закрывать. Пробуем, делаем?

romfus
10-05-2018, 15:24
Давайте. Попробуем

Iska
10-05-2018, 15:48
romfus, а что с текущим скриптом — заработал он у Вас, або нет?

romfus
10-05-2018, 15:49
Заработал да. Я отписался что работает

Iska
10-05-2018, 15:56
Давайте. Попробуем »
Пробуйте:
Option Explicit

Dim strSourceFolder

Dim objFSO
Dim objFile

Dim objExcel


If WScript.Arguments.Count = 1 Then
strSourceFolder = WScript.Arguments.Item(0)

Set objExcel = Nothing

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strSourceFolder) Then
For Each objFile In objFSO.GetFolder(strSourceFolder).Files
Select Case LCase(objFSO.GetExtensionName(objFile.Name))
Case "xls", "xlsx"
If objExcel Is Nothing Then
Set objExcel = WScript.CreateObject("Excel.Application")
End If

With objExcel
With .Workbooks.Open(objFile.Path)
With .Worksheets.Item(1)
If StrComp(.Cells(1, 1).Value, "num", vbTextCompare) = 0 Then
With .UsedRange.EntireColumn
.Offset(0, 1).Delete
.AutoFit
End With

.PrintOut
Else
WScript.Echo "Can't find [num] in A1 cell in first worksheet in [" & objFile.Name & "] workbook."
End If
End With

.Close False
End With
End With
Case Else
' Nothing to do
End Select
Next

objExcel.Quit

Set objExcel = Nothing
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 2
End If
Else
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>"
WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0

Путь к исходной папке указывается параметром скрипта (также можно просто перетащить исходную папку на скрипт в Проводнике).

romfus
10-05-2018, 16:05
Usage cscript.exe //nologo "3.vbs" <Source folder> как тут быть?

а все разобрался

Iska
10-05-2018, 16:09
Заработал да. Я отписался что работает »
Ясно. Я не увидел то, что Вы дописывали.

А вот такой вопрос. А нельзя ли чтобы столбец NUM шел не просто вниз а по всему листу?. ПРи печати хорошая Экономия бумаги получится. То что я вам кинул это самый маленький файл. Так если на печатаь бросать результат получается на 8 листов аж »
Можно будет попробовать. Сверху вниз, затем слева направо, затем опять сверху вниз, затем опять слева направо, …, затем следующий лист и повторяем то же самое, так?

romfus
10-05-2018, 16:11
так да

Iska
10-05-2018, 16:11
Usage cscript.exe //nologo "3.vbs" <Source folder> как тут быть?
а все разобрался »
Удобнее всего Вам будет просто перетаскивать папку на скрипт в Проводнике — подхватить папку, перетащить и бросить её на скрипт.

romfus
10-05-2018, 16:12
Да да. Я тут разобрался уже

Iska
10-05-2018, 16:24
так да »
Тогда давайте, чтоб не заниматься излишней универсализацией (да я и не уверен, что такое возможно в принципе, всё ж это не Microsoft Access), Вы посчитаете, сколько столбцов у Вас, на Вашем принтере, умещаются на одной странице при печати (и, кстати, мы будем вставлять для наглядности по короткому пустому вспомогательному столбцу между основными?) и сколько строк у Вас умещается на одной странице при печати. От этого и будем танцевать.

romfus
10-05-2018, 16:42
7 строк по горизонтали и 56 по вертикали

Iska
10-05-2018, 16:47
romfus, Вы точно уверены насчёт семи столбцов? У меня токмо шесть помещаются. И — по короткому пустому столбцу между столбцами будем вставлять для наглядности, або нет?




© OSzone.net 2001-2012