Please help. I have an email sender that was left to me by a previous employee. Its used on this ridiculously large contact list. The sender button is gone and the macros won’t get past debugging:
This is the highlight line where the debugging stops:
Set myMessage = myOutlook.CreateItemFromTemplate(«http://orfmoss/Procurement/Procurement Dept/TRUCKING/RFIs/Email Templates» & cell.Offset(0, 7))
This is what populates in the «Repairs» window:
Repaired Part: /xl/worksheets/sheet1.xml part with XML error. Load error. Line 2, column 0.
This is what pops up in the repair log:
<?xml version=»1.0″ encoding=»UTF-8″ standalone=»true»?>
-<recoveryLog xmlns=»http://schemas.openxmlformats.org/spreadsheetml/2006/main»>
<logFileName>error025920_02.xml</logFileName>
<summary>Errors were detected in file ‘\orfmossDavWWWRootProcurementProcurement DeptTRUCKINGRFIsRFI_FileSender.xlsm'</summary>
-<repairedParts summary=»Following is a list of repairs:»>
<repairedPart>Repaired Part: /xl/worksheets/sheet1.xml part with XML error. Load error. Line 2, column 0.</repairedPart>
</repairedParts>
</recoveryLog>
Does anyone have any input? I need to fix this as soon as possible. Any help would be greatly appreciated.
-
Moved by
Wednesday, November 28, 2018 1:47 AM
Move thread
Please help. I have an email sender that was left to me by a previous employee. Its used on this ridiculously large contact list. The sender button is gone and the macros won’t get past debugging:
This is the highlight line where the debugging stops:
Set myMessage = myOutlook.CreateItemFromTemplate(«http://orfmoss/Procurement/Procurement Dept/TRUCKING/RFIs/Email Templates» & cell.Offset(0, 7))
This is what populates in the «Repairs» window:
Repaired Part: /xl/worksheets/sheet1.xml part with XML error. Load error. Line 2, column 0.
This is what pops up in the repair log:
<?xml version=»1.0″ encoding=»UTF-8″ standalone=»true»?>
-<recoveryLog xmlns=»http://schemas.openxmlformats.org/spreadsheetml/2006/main»>
<logFileName>error025920_02.xml</logFileName>
<summary>Errors were detected in file ‘\orfmossDavWWWRootProcurementProcurement DeptTRUCKINGRFIsRFI_FileSender.xlsm'</summary>
-<repairedParts summary=»Following is a list of repairs:»>
<repairedPart>Repaired Part: /xl/worksheets/sheet1.xml part with XML error. Load error. Line 2, column 0.</repairedPart>
</repairedParts>
</recoveryLog>
Does anyone have any input? I need to fix this as soon as possible. Any help would be greatly appreciated.
-
Moved by
Wednesday, November 28, 2018 1:47 AM
Move thread
Я написал код для создания jTable и экспорта в Excel. Я работаю, но когда я открываю файл Excel, он не восстанавливается полностью. Это показывает следующую проблему:
Отремонтированная часть: /xl/worksheets/sheet2.xml часть с ошибкой XML. Ошибка загрузки. Строка 2, столбец 0. Восстановленная деталь: /xl/worksheets/sheet7.xml часть с ошибкой XML. Ошибка загрузки. Строка 2, столбец 0. Удаленные записи: именованный диапазон из части /xl/workbook.xml (рабочая книга) Удаленные записи: таблица из части /xl/tables/table1.xml (таблица)
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.awt.event.ActionEvent;
public class GUI {
private static JTextField textField;
private static JTextField textField_1;
public static void main(String args[]) throws IOException {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object rowData[][] = null ;
Object columnNames[] = { "Column One", "Column Two"};
DefaultTableModel model = new DefaultTableModel(rowData,columnNames);
frame.getContentPane().setLayout(null);
JTable table = new JTable(model);
table.setModel(model);
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setBounds(76, 106, 300, 200);
scrollPane.setVisible(true);
frame.getContentPane().add(scrollPane);
textField = new JTextField();
textField.setBounds(76, 21, 86, 20);
frame.getContentPane().add(textField);
textField.setColumns(10);
textField_1 = new JTextField();
textField_1.setBounds(76, 61, 86, 20);
frame.getContentPane().add(textField_1);
textField_1.setColumns(10);
JLabel lblNewLabel = new JLabel("Name");
lblNewLabel.setBounds(20, 24, 46, 14);
frame.getContentPane().add(lblNewLabel);
JLabel lblAge = new JLabel("Age");
lblAge.setBounds(20, 64, 46, 14);
frame.getContentPane().add(lblAge);
JButton btnNewButton = new JButton("Get Data");
btnNewButton.setBounds(235, 40, 89, 23);
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
String name = textField.getText().toString();
int age = Integer.parseInt(textField_1.getText());
model.addRow(new Object[] {name,age});
Object obj1 = GetData(table, 0,0 );
System.out.println("Cell value of 1 column and 1 row :" + obj1);
Object obj2 = GetData(table, 0,1 );
System.out.println("Cell value of 2 column and 1 row :" + obj2);
}
});
frame.getContentPane().add(btnNewButton);
JButton btnNewButton_1 = new JButton("Excel");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try {
writeToExcel(table);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
btnNewButton_1.setBounds(340, 40, 89, 23);
frame.getContentPane().add(btnNewButton_1);
frame.setSize(455, 356);
frame.setVisible(true);
}
protected static void writeToExcel(JTable table) throws Exception {
try {
File file = new File("IET.xlsx");
FileInputStream inputStream = new FileInputStream(file);
XSSFWorkbook workbook = (XSSFWorkbook) WorkbookFactory.create(inputStream);
XSSFSheet sh = workbook.getSheet("UserInputs");
TableModel model = table.getModel();
String value1 = model.getValueAt(0, 0).toString();
String value2 = model.getValueAt(0, 1).toString();
workbook.getSheet("UserInputs").getRow(8).getCell(1).setCellValue(value2);
FileOutputStream fileOut = new FileOutputStream(file);
workbook.write(fileOut);
fileOut.close();
workbook.close();
System.out.println("File written successfully");
}
catch(Exception e){
System.out.print(e);}
}
private static Object GetData(JTable table, int x, int y) {
return table.getValueAt(x, y).toString();
}
}
Что-то не так с кодом?
1 ответ
Лучший ответ
Ваш код перезаписывает только одну ячейку B9 на листе UserInputs. Если это приводит к проблеме:
«Отремонтированная часть: /xl/worksheets/sheet2.xml часть с ошибкой XML. Ошибка загрузки. Строка 2, столбец 0. Отремонтированная часть: /xl/worksheets/sheet7.xml часть с ошибкой XML. Ошибка загрузки. Строка 2, столбец 0 . Удаленные записи: именованный диапазон из части /xl/workbook.xml (рабочая книга). Удаленные записи: таблица из части /xl/tables/table1.xml (таблица) »
При открытии книги в Excel ячейка B9 на листе UserInputs является одной из ячеек заголовка объекта таблицы Excel. Кроме того, по крайней мере, на листе Sheet2 и Sheet7 есть ссылки на структурированные таблицы, такие как =Tablename[Columnname], используемые в формулах, и такие ссылки на структурированные таблицы также используются в именованных диапазонах.
Таким образом, если B9 в листе листа UserInputs является одной из ячеек заголовка объекта таблицы Excel и теперь изменяется, то сначала сама таблица повреждена, так как одно из имен столбцов изменилось без обновления Таблица. Но также все ссылки на структурированные таблицы, такие как =Tablename[Columnname], повреждены, поскольку Columnname был изменен без обновления всех этих формул.
Обновить заголовки таблицы можно с помощью XSSFTable.updateHeaders. Но обновление всех ссылок на структурированные таблицы во всех формулах на всех листах и даже во всех именованных диапазонах было бы очень дорогостоящим или почти невозможным. Поэтому я бы рекомендовал не изменять ячейки заголовка объекта таблицы Excel. Оставьте ячейки заголовка такими, какие они есть, и измените только диапазон содержимого таблицы.
Примере:
У нас будет следующий файл IET.xlsx:

Как видите, на листе UserInput есть таблица с именем Table1, а заголовки находятся в строке 9.
Теперь мы можем перезаписать диапазон содержимого B10:F[10+n] содержимым из JTable следующим образом:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.*;
import org.apache.poi.ss.util.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
class ReadAndWriteExcelHavingTableObject {
static void writeToExcel(XSSFTable exceltable, JTable table) throws Exception {
int exceltableStartRow = exceltable.getStartRowIndex();
int exceltableStartCol = exceltable.getStartColIndex();
XSSFSheet sheet = (XSSFSheet)exceltable.getParent();
TableModel model = table.getModel();
int exceltableEndRow = exceltableStartRow + model.getRowCount(); //as much rows as are in the model
int exceltableEndCol = exceltable.getEndColIndex();
//write the content
for (int r = 0; r < model.getRowCount(); r++) {
for (int c = 0; c < exceltableEndCol - exceltableStartCol + 1; c++) {
XSSFRow row = sheet.getRow(exceltableStartRow + 1 + r);
if (row == null) row = sheet.createRow(exceltableStartRow + 1 + r);
XSSFCell cell = row.getCell(exceltableStartCol + c);
if (cell == null) cell = row.createCell(exceltableStartCol + c);
if (c < model.getColumnCount() && model.getValueAt(r, c) instanceof String) {
String str = (String)model.getValueAt(r, c);
cell.setCellValue(str);
} else if (c < model.getColumnCount() && model.getValueAt(r, c) instanceof Double) {
Double value = (Double)model.getValueAt(r, c);
cell.setCellValue(value);
} else if (c >= model.getColumnCount()) { //formula cells
XSSFCell firstCell = sheet.getRow(exceltableStartRow + 1).getCell(exceltableStartCol + c);
if (firstCell.getCellTypeEnum() == CellType.FORMULA) {
cell.setCellFormula(firstCell.getCellFormula());
}
}
}
}
//update the size of exceltable
exceltable.setCellReferences(new AreaReference(
new CellReference(exceltableStartRow, exceltableStartCol),
new CellReference(exceltableEndRow, exceltableEndCol),
SpreadsheetVersion.EXCEL2007));
}
public static void main(String[] args) throws Exception {
Object rowData[][] = {
{"Bob", 12.0, 3.0},
{"Alice", 34.0, 2.5},
{"Jack", 56.0, 2.0},
{"John", 78.0, 1.5}
};
Object columnNames[] = {"Name", "Amount", "Factor"};
DefaultTableModel model = new DefaultTableModel(rowData, columnNames);
JTable table = new JTable(model);
table.setModel(model);
File file = new File("IET.xlsx");
FileInputStream inputStream = new FileInputStream(file);
XSSFWorkbook workbook = (XSSFWorkbook)WorkbookFactory.create(inputStream);
XSSFTable exceltable = workbook.getTable("Table1");
writeToExcel(exceltable, table);
workbook.setForceFormulaRecalculation(true);
FileOutputStream fileOut = new FileOutputStream(file);
workbook.write(fileOut);
fileOut.close();
workbook.close();
}
}
Результат будет:

А поскольку заголовки не меняются, сама таблица и все структурированные ссылки после этого не будут повреждены.
0
Axel Richter
7 Мар 2019 в 07:42

Автор
Тема: Ошибка в эксель (Прочитано 19402 раз)
Добрый вечер. Уважаемый знатоки.
Такая проблема возникает:
Сохраняю документ, открываю его вновь, программа предлагает восстановить данные.
Возникает ошибка такого содержания:
Иногда возникает такая ошибка:
Удаленный компонент: часть /xl/styles.xml с ошибкой XML. (Стили) Ошибка загрузки. Строка 2, столбец 3335.
Восстановленные записи: Сведения о ячейках из части /xl/worksheets/sheet1.xml
После этого из файла пропадает часть дробных частей чисел.
В чем может быть причина?
Эксель 2007
« Последнее редактирование: 11.06.2013, 19:53:03 от sergo44441 »

Записан
Не торопись, и все успеешь намного быстрее
В такой ситуации надо смотреть что там с этим /xl/styles.xml, открыв файл .xlsx как архив. Например 7Zip’ом.
А далее провести эксперименты на копии файла:
- Вариант1: Тупо удалить styles.xml.
- Вариант2: Открыть его (например XML Notepad’ом), поискать что там не так, исправить.
- Вариант3: Сделать пересадку из другого файла, с той же «группой крови».

При неудаче, попеременно (значения, формулы, форматы, а не листы целиком) перетащить всё в новый файл, а этот, косячный, утилизировать.

Записан
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли
ниже приведен пример файла yaml, который я уже проверил через YAMLint
URL, но при загрузке этого файла библиотечной функцией yaml-cpp LoadFile я получаю сообщение об ошибке: «Ошибка в строке 0, столбце 0: неправильное преобразование при загрузке файла YAML»
Пример файла yaml:
%YAML 1.1
---
name: abcd_server_interface
spec_type: interface
spec_version: 1
description: 'Interface for capability ABCD Slam'
default_provider: abcd_server/abcd_server_provider
interface: {}
topics: {
provides: {
provide: {
name: '/3d_pose_graph',
type: '-',
description: '-',
},
provide: {
name: '/key_frame_msgs',
type: '-',
description: '-'
},
provide: {
name: '/pc_map',
type: 'sensor_msgs/PointCloud2',
description: 'Point cloud'
},
provide: {
name: '/3dOctomap',
type: '-',
description: '-'
},
provide: {
name: '/poseOfRobots',
type: '-',
description: '-'
},
provide: {
name: '/occupied_calls_vis_array',
type: '-',
description: '-'
},
},
requires: {
require: {
name: '/image_depth_throttled',
type: 'sensor_msgs/Image',
description: 'Sensor Image',
},
require: {
name: '/image_color_throttled/compressed',
type: 'sensor_msgs/CompressedImage',
description: 'Sensor compressed image',
},
require: {
name: '/statistics',
type: '-',
description: '-',
},
require: {
name: '/initialpose',
type: '-',
description: '-',
},
require: {
name: '/reset_rgbdserver',
type: 'std_msgs/Bool',
description: 'To reset server',
},
require: {
name: '/scan',
type: 'sensor_msgs/LaserScan',
description: 'laser scan data',
},
require: {
name: '/tf',
type: 'tf2_msgs/TFMessage',
description: 'tf',
},
require: {
name: '/tf_static',
type: 'tf2_msgs/TFMessage',
description: 'tf static',
},
}
}
Parameter: {
parameter: {
name: 'max_delay',
value: '100'
},
parameter: {
name: 'rgb_hints',
value: 'compressed'
},
parameter: {
name: 'depth_hints',
value: 'raw'
},
parameter: {
name: 'bot_frame',
value: '/base_link'
},
parameter: {
name: 'kinect_frame',
value: '/camera_depth_optical_frame'
},
parameter: {
name: 'minZ',
value: '-1.0'
},
parameter: {
name: 'maxZ',
value: '4.0'
},
}
Вот код, который я написал, чтобы заменить значение имени параметра («max_delay») в файле yaml в разделе параметров.
#include <fstream>
#include <iostream>
#include "yaml-cpp/yaml.h"
using namespace std;
bool UpdateYAMLFile(const string& sYamlFile, const string& sParamName2Update, const string sValue)
{
bool bRet = false;
try
{
//YAML::Node head_ = YAML::LoadFile(sYamlFile);
YAML::Node head_ = YAML::LoadFile(sYamlFile);
//YAML::Node head_ = YAML::Load(sYamlFile);
std::cout << head_.size();
cout<<"ramesh"<<endl;
for (YAML::iterator ith = head_.begin();ith != head_.end(); ++ith)
{
YAML::Node sub1_ = ith->second;
for (YAML::iterator itc = sub1_.begin();itc != sub1_.end(); ++itc)
{
string sParam = itc->second["name"].as<std::string>(); //cout << sParam << endl;
if(sParam == sParamName2Update)
{
itc->second["value"] = sValue;
bRet = true;
}
}
}
ofstream fout(sYamlFile);
fout << head_; //cout << head_ << "n";
}
catch (const YAML::Exception& e)
{
cout << "ERROR: Updation of yaml file " << sYamlFile << "Failed: Exception: " << e.what() << "n";
}
return bRet;
}
//driver
int main(int argc, char** argv)
{
int bRet = UpdateYAMLFile("sample.yaml", "max_delay","1150");
if(bRet == true)
cout << "SUCCESS: YAML file updated..n";
else
cout << "ERROR: YAML file update FAILED...n";
return 0;
}
В основном API UpdateYAMLFile обновит значение параметра max_dealy в файле примера yaml. используя этот API, я должен иметь возможность обновить все параметры (max_delay, rgb_hints, deep_hints, minZ, maxZ) в разделе параметров образца
файл yaml.
команда:
g ++ -std = c ++ 0x yaml.cpp -o res /usr/lib/x86_64-linux-gnu/libyaml-cpp.a
1
Решение
Похоже, вы один на вашем доступе к карте. Ваши карты вложены в три глубины:
topics: { // first key/value pair
provides: { // second key/value pair
provide: { // third key/value pair
name: '/3d_pose_graph', // now lookup the name attribute
type: '-',
description: '-',
}
}
}
У вас также есть проблема с вашей третьей картой: все ключи "provide", Это на самом деле не карта, и она будет проанализирована как одна пара ключ / значение (каждая перезаписывает предыдущую). Вы можете составить список следующим образом:
topics: {
provides: [ // this is now a list
{
name: '/3d_pose_graph',
type: '-',
description: '-',
}, {
name: '/key_frame_msgs',
type: '-',
description: '-'
}, ...
]
}
Более того, вам не нужно слепо перебирать значения карт, не зная, что в них. Почему бы просто не получить доступ к ключам напрямую:
for (YAML::Node provides : head_["topics"]["provides"]) {
if (provides["name"].as<std::string>() == sParamName2Update) {
provides["name"] = sValue;
}
}
1
Другие решения
Других решений пока нет …
|
Ошибка файла после запуска макроса (ов) |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |

