c#从文本文件复制到word文档
c# copy from text file to word document
我想将数据从文本文件复制到 word 文件。我已经尝试过使用 string array
、StringBuilder
和 StreamReader
等不同的替代方案,使用 Interop
效果很好,但它需要太多时间。如果有人能向我推荐更好的,我将不胜感激。网上查了很多表格,没找到
仅供参考:我的文本文件包含超过 1,00,000 行。
这是我试过的其中之一:
string[] lines = File.ReadAllLines(path); //path is text file path
var doc = new MSWord.Document();
foreach (string lin in lines)
{
doc.Content.Text += lin.ToString();
}
doc.Save();
好吧,这很好用,但会花费很多时间,有时还会抛出如下错误:
Unhandled Exception: System.Runtime.InteropServices.COMException: Word has encountered a problem.
static void Main(string[] args)
{
Word.Application wordApp = new Word.Application();
Word.Document wordDoc = wordApp.Documents.Add();
Stopwatch sw = Stopwatch.StartNew();
System.Console.WriteLine("Starting");
string path = @"C:\";
StringBuilder stringBuilder = new StringBuilder();
using (FileStream fs = File.Open(path + "\big.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
wordDoc.Content.Text = sr.ReadToEnd();
wordDoc.SaveAs("big.docx");
}
sw.Stop();
System.Console.WriteLine($"Complete Time :{sw.ElapsedMilliseconds}");
System.Console.ReadKey();
}
输出:
Starting
Complete Time :5556
或者您可以使用并行:
using (StreamReader sr = new StreamReader(bs))
{
Parallel.ForEach(sr.ReadToEnd(), i=>
{
stringBuilder.Append(i);
});
wordDoc.Content.Text = stringBuilder.ToString();
wordDoc.SaveAs(path + "\big3.docx");
}
输出:
Starting
Complete Time :2587
Microsoft Word 可以读取文本文件 - 那么为什么不将文本文件读入 Interop Word 文档,然后使用其中一种另存为方法进行转换。
我测试了一个 34Mb、1000000 行的文本文件 - 结果是一个 22Mb 的 DOCX 文件:
MSWord.Application appAC = new MSWord.Application();
MSWord.Document doc = appAC.Documents.Open("TestRead.txt");
doc.SaveAs2(FileName:"TestSave", FileFormat:WdSaveFormat.wdFormatDocumentDefault);
doc.Close();
appAC.Quit();
请注意,Microsoft 声明最大文档大小为 32MB - 文本文件超出了此大小,但生成的 DOCX 文件较小 - 您的异常可能与最终文件的大小有关。
我想将数据从文本文件复制到 word 文件。我已经尝试过使用 string array
、StringBuilder
和 StreamReader
等不同的替代方案,使用 Interop
效果很好,但它需要太多时间。如果有人能向我推荐更好的,我将不胜感激。网上查了很多表格,没找到
仅供参考:我的文本文件包含超过 1,00,000 行。
这是我试过的其中之一:
string[] lines = File.ReadAllLines(path); //path is text file path
var doc = new MSWord.Document();
foreach (string lin in lines)
{
doc.Content.Text += lin.ToString();
}
doc.Save();
好吧,这很好用,但会花费很多时间,有时还会抛出如下错误:
Unhandled Exception: System.Runtime.InteropServices.COMException: Word has encountered a problem.
static void Main(string[] args)
{
Word.Application wordApp = new Word.Application();
Word.Document wordDoc = wordApp.Documents.Add();
Stopwatch sw = Stopwatch.StartNew();
System.Console.WriteLine("Starting");
string path = @"C:\";
StringBuilder stringBuilder = new StringBuilder();
using (FileStream fs = File.Open(path + "\big.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
wordDoc.Content.Text = sr.ReadToEnd();
wordDoc.SaveAs("big.docx");
}
sw.Stop();
System.Console.WriteLine($"Complete Time :{sw.ElapsedMilliseconds}");
System.Console.ReadKey();
}
输出:
Starting
Complete Time :5556
或者您可以使用并行:
using (StreamReader sr = new StreamReader(bs))
{
Parallel.ForEach(sr.ReadToEnd(), i=>
{
stringBuilder.Append(i);
});
wordDoc.Content.Text = stringBuilder.ToString();
wordDoc.SaveAs(path + "\big3.docx");
}
输出:
Starting
Complete Time :2587
Microsoft Word 可以读取文本文件 - 那么为什么不将文本文件读入 Interop Word 文档,然后使用其中一种另存为方法进行转换。
我测试了一个 34Mb、1000000 行的文本文件 - 结果是一个 22Mb 的 DOCX 文件:
MSWord.Application appAC = new MSWord.Application();
MSWord.Document doc = appAC.Documents.Open("TestRead.txt");
doc.SaveAs2(FileName:"TestSave", FileFormat:WdSaveFormat.wdFormatDocumentDefault);
doc.Close();
appAC.Quit();
请注意,Microsoft 声明最大文档大小为 32MB - 文本文件超出了此大小,但生成的 DOCX 文件较小 - 您的异常可能与最终文件的大小有关。