Страницы: Пред. 1 2
RSS
Восстановление поврежденного файла (макрос)
 
Изменил программу. Теперь она удаляет только стиль "Финансовый". Ссылка на скачивание.
P.S. Требуется установка .NET Framework 4.6.2.
P.P.S. Пробуйте на копиях файлов!
Исходный код:
Код
private void button1_Click(object sender, EventArgs e)
{

   var dialog = new FolderBrowserDialog();
   if (dialog.ShowDialog() == DialogResult.Cancel) return;

   foreach (var file_path in Directory.EnumerateFiles(dialog.SelectedPath))
   {

      using (var zip = ZipFile.Open(file_path, ZipArchiveMode.Update))
      {
         var styles_entry = zip.Entries.Where(entry => entry.FullName == "xl/styles.xml").First();
         using (var stream = styles_entry.Open())
         {
            XNamespace ns = "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
            var xml = XElement.Load(stream);
            var cell_style = xml.Element(ns + "cellStyles")
               .Elements(ns + "cellStyle")
               .Where(cellStyle => cellStyle.Attribute("name").Value == "Финансовый")
               .FirstOrDefault();
            if(cell_style != null)
            {
               cell_style.Remove();
               stream.Position = 0;
               stream.SetLength(0L);
               xml.Save(stream);
            }
         }
      }
   }

   MessageBox.Show("Готово!");
}
There is no knowledge that is not power
 
VSerg, наверное, в другом проблема
 
Элли93, VSerg подтвердил, что проблема в этом стиле. Пробуйте новую программу.
There is no knowledge that is not power
 
VSerg, SuperCat,  а что теперь с кодиком делать?
У меня по ссылке на скачивание не проходит, запрет на сайт(
 
Элли93, Напишите в личку Вашу почту - быть может, по почте получится принять файл.
There is no knowledge that is not power
 
Только что проверил - после удаления формата "Финансовый" ошибка больше не возникает. Так что с Вас - на конфеты! Шучу, конечно)))
There is no knowledge that is not power
 
SuperCat,почту скинула.
Ой, если все заработает, то с радостью))
 
Элли, файл отправил. Если почта не пропустит файл (из-за  того, что это программа), я тогда заменю расширение файла на DOC (вместо EXE), а Вы после получения измените расширение обратно на EXE.
There is no knowledge that is not power
 
Так и есть - почта не пропустила:
Цитата
Message rejected due to unacceptable attachments
Тогда отправил с расширением DOC (типа вордовский файл). :)
There is no knowledge that is not power
 
SuperCat, поменяла формат и там черное окошечко вылезло, и закрылось.
Может я из дома тогда попробую?
 
.NET Framework 4.6.2 установлен? Вот ссылка на скачивание.
Если на работе не получится, то попробуйте дома)
There is no knowledge that is not power
 
SuperCat,  я Вам вечером отпишусь тогда о результате :)
На работе защита.
 
Элли, я уже понял) Хорошо! Жду ответа
There is no knowledge that is not power
 
Код
<cellStyle name="Финансовый" xfId="5" builtinId="3"/>
Посмотрел по стандарту. Ничего необычного не нашёл.
builtinId="3" Cell_Style=Comma
xfId=5 Cсылается (в cellStyleXfs) на:
Код
<xf numFmtId="165" fontId="24" fillId="0" borderId="0" applyFont="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"/>
numFmtId=165 Есть такой.
fontId=24:
Код
<font>
   <sz val="11"/>
   <color theme="1"/>
   <name val="Calibri"/>
   <family val="2"/>
   <charset val="204"/>
   <scheme val="minor"/>
</font>

sz val="11" Размер шрифта 11
color theme="1" Ссылается на (здесь отклонение нет):
Код
<a:clrScheme name="Стандартная">
    <a:lt1>
        <!-- lt1=accent 1 color
             sysClr=color bound to predefined operating system elements
             val=system color value (window=Specifies window background color)
             lastClr=color value that was last computed by the generating application
        -->
   <a:sysClr val="window" lastClr="FFFFFF"/>
    </a:lt1>
</a:clrScheme>
name="Calibri" Название шрифта
family val="2" Font Family=Swiss
charset val="204" Character Set=RUSSIAN_CHARSET
scheme val="minor" This font is the minor font for this theme.

Может, у кого-то есть какие догадки, что здесь не так?
There is no knowledge that is not power
 
SuperCat, Ура-ура, ошибка исчезла!)))
 
Тогда жду конфеты!
There is no knowledge that is not power
 
Форумчане, добрый день!
Не подскажете что значит данная ошибка при запуске программы?
 
уважаемый SuperCat, а возможно ли эту задачу решить средствами VBA? без привлечения технологии NET? чтобы прямо внутри макроса?
 
@Maks041982 Теоретически сделать можно. Сначала с помощью Shell.Application распаковать файл, потому с помощью XML библиотеки (Microsoft XML, v6.0) сделать изменения в XML. XML, в свою очередь, использует пространство имён (namespace), поэтому это надо учесть при сканировании элементов.
There is no knowledge that is not power
 
SuperCat, Ваше решение устранит проблему в самом его корне. А есть возможность зайти с другой стороны? Ведь если открывать файлы вручную - то эксель сам успешно справляется с проблемой, пользователю остается лишь соглашаться с исправлениями и на сохранение файла с исправлениями. можно ли автоматизировать не само исправление файлов, и именно ответы пользователя.
т.е. идеальный конечный результат такой: 1) макрос открывает очередной файл; 2) эксель ругается, предлагает исправить; 3) макрос соглашается на исправления; 4) макрос сохраняет файл под тем же именем и переходит к следующему файлу

такое возможно?
Страницы: Пред. 1 2
Наверх