2015-12-22 6 views
0

Я новичок в C#, мне нужно преобразовать файл excel в xml с простыми узлами. Я сделал это до сих пор с помощью interop. Я написал части кода, чтобы открыть xls, закрыть xls, получить значение ячейки методом Get_range и освободить объект.Преобразование файла xls в xml-файл с использованием C#

Но теперь мне нужно вывести файл xml, я должен перейти к определенной ячейке и распечатать узел и значение ячейки. Это может быть простой простой текст, который я могу вывести, или мы можем использовать linq Xelement и Xattributes. Я думаю при использовании get_range:

xlWorkSheet.get_Range("B3", "B3").Value2 

Мне нужно распечатать то же самое в excel.

Я не уверен, как это сделать, пожалуйста, направляйте меня. Получаемый xml должен выглядеть примерно так:

<WpData> 
<WpType>Design</WpType> 
<ReviewType>half</ReviewType> 
<References>[1] https:///SysService/SysService_AsrDet/trunk/_doc/20_Design 


</References> 
<Author>deh</Author> 
<Reviewer>abc</Reviewer> 
</WpData> 

благодарит заранее.

+0

Вы можете попробовать получить «DataTable» из xls с помощью соответствующего поставщика OLEDB (Jet/Ace), затем использовать ['DataTable.WriteXml'] (https://msdn.microsoft.com/library/system.data. datatable.writexml% 28v = vs.110% 29.aspx) метод –

+0

Но я уже провел с interop, я хотел бы продолжить это только, спасибо. – user5440565

ответ

0

Вы ищете сериализацию xml. Вы должны определить класс, как это:

[Serializable] 
public class WpData 
{ 
    public string WpType { get; set; } 
    public string ReviewType { get; set; } 
    public string References { get; set; } 
    public string Author { get; set; } 
    public string Reviewer { get; set; } 
} 

Примечание Serializable атрибут класса.

Затем вы должны заполнить свой объект из данных первенствовать и использовать XmlSerializer:

WpData xmlSerializibleObject = new WpData(); 

//.... 
//here you should fill it from excel based on your data 

//And then you can just serialize it to string 
string xmlString; 
XmlSerializer xmlSerializer = new XmlSerializer(xmlSerializibleObject.GetType()); 

using(StringWriter textWriter = new StringWriter()) 
{ 
    xmlSerializer.Serialize(textWriter, xmlSerializibleObject); 
    xmlString = textWriter.ToString(); 
} 

xmlString будет иметь XML, что вам нужно, это вы заполняете свой объект правильно из Excel.

+0

Будет ли он работать, если мой итоговый xml больше? – user5440565

+0

@ user5440565 Что вы имеете в виду, когда говорите больше? Если вам нужны дополнительные поля, просто добавьте их в свой класс. Нет ограничений на номер поля. –

+0

Я имею в виду, что если у меня есть большой xml-файл с 100 точками, тогда мне нужно добавить их один за другим, например: public string Reviewer {get; задавать; } ?? – user5440565

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