我在网上发现了这个lib
// A library to handle excel files in a simple way.
// Copyright (C) 2009 Gorka Suárez García
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see .
using System;
using System.Collections.Generic;
using System.Reflection;
using Microsoft.Office.Interop.Excel;
namespace Excel
{
/// <summary>
/// This class is used to handle an excel file to write and read from it.
/// Author: Gorka Suárez García
/// </summary>
public class ExcelHandler
{
/// <summary>
/// The excel application instance.
/// </summary>
private ApplicationClass app;
/// <summary>
/// The excel book.
/// </summary>
private Workbook book;
/// <summary>
/// The path of the excel file.
/// </summary>
private string path;
/// <summary>
/// Constructs a new ExcelHandler object.
/// </summary>
public ExcelHandler()
{
this.app = null;
this.book = null;
this.path = null;
}
/// <summary>
/// Destroys the ExcelHandler object.
/// </summary>
~ExcelHandler()
{
if (this.app != null)
{
this.app.Quit();
}
}
/// <summary>
/// Opens an excel file.
/// </summary>
/// <param name="path">The file to open.</param>
public void Open(string path)
{
this.path = path;
this.app = new ApplicationClass();
this.app.Visible = true;
/*this.app.ScreenUpdating = false;
this.app.DisplayAlerts = false;*/
this.book = this.app.Workbooks.Open(this.path, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value);
if (this.book == null)
throw new Exception("Can't open the excel book file.");
}
/// <summary>
/// Writes a value in a cell.
/// </summary>
/// <param name="sheet">The sheet to write.</param>
/// <param name="cell">The cell to write.</param>
/// <param name="value">The value to write.</param>
public void Write(string sheet, string cell, string value)
{
Worksheet wsheet = this.getSheet(sheet);
Range range = wsheet.get_Range(cell, cell);
range.Value2 = value;
}
/// <summary>
/// Reads a value from a cell.
/// </summary>
/// <param name="sheet">The sheet to read.</param>
/// <param name="cell">The cell to read.</param>
/// <returns>The value from the cell.</returns>
public string Read(string sheet, string cell)
{
Worksheet wsheet = this.getSheet(sheet);
Range range = wsheet.get_Range(cell, cell);
if (range.Value2 != null)
return range.Value2.ToString();
else
return "";
}
/// <summary>
/// Clears the content of the excel book.
/// </summary>
public void Clear()
{
Worksheet sheet = null;
for (int i = 1; i <= this.book.Worksheets.Count; i++)
{
sheet = (Worksheet)this.book.Worksheets[i];
sheet.Cells.Clear();
}
}
/// <summary>
/// Closes the excel file.
/// </summary>
public void Close()
{
this.book.SaveAs(this.path, XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value,
false, false, XlSaveAsAccessMode.xlShared, false, false, Missing.Value,
Missing.Value, Missing.Value);
this.book.Close(true, Missing.Value, Missing.Value);
this.app.Quit();
this.app = null;
this.book = null;
this.path = null;
}
/// <summary>
/// Gets all the names of the sheets inside the excel book.
/// </summary>
/// <returns>A list of the sheets names.</returns>
public string[] GetSheetsNames()
{
List<string> names = new List<string>();
Worksheet sheet = null;
for (int i = 1; i <= this.book.Worksheets.Count; i++)
{
sheet = (Worksheet)this.book.Worksheets[i];
names.Add(sheet.Name);
}
return names.ToArray();
}
/// <summary>
/// Gets a sheet we're looking for.
/// </summary>
/// <param name="name">The name of the sheet.</param>
/// <returns>The sheet we're looking for.</returns>
protected Worksheet getSheet(string name)
{
int index = this.getSheetIndex(name);
if (index == 0)
throw new Exception("Invalid sheet name.");
Worksheet sheet = (Worksheet)this.book.Worksheets[index];
return sheet;
}
/// <summary>
/// Gets the index of a sheet we're looking for.
/// </summary>
/// <param name="name">The name of the sheet.</param>
/// <returns>The index of the sheet we're looking for.</returns>
protected int getSheetIndex(string name)
{
Worksheet sheet = null;
for (int i = 1; i <= this.book.Worksheets.Count; i++)
{
sheet = (Worksheet)this.book.Worksheets[i];
if (sheet.Name == name) return i;
}
return 0;
}
}
}
我正在尝试使用它来填充我在excel中制作的模板。像这样举例如:
Excel.ExcelHandler handler = new Excel.ExcelHandler();
handler.Open(this.filename);
handler.Write("Informe", "E9", row.Fecha);
handler.Close();
它工作正常......没有错误......但是当我尝试打开填充的xlsx时,Excel表示它已损坏。任何想法为什么???我对此失去了理智,任何帮助都会被大大贬低。
问候。
答案 0 :(得分:4)
尝试将XlFileFormat.xlWorkbookNormal
更改为XlFileFormat.xlWorkbookDefault
或xlOpenXMLWorkbook
。
看起来文件以'XLS'格式保存,但扩展名为'XLSX'。因此错误。