3

これがプロセスです。dataというワークシート内にtemplateというxlsmファイルがあります。次に、5つのCsvファイルがあります。すべてのcsvファイルの内容をデータワークシート内に配置する必要があります。

日付が「07/09/12」の場合を除いて、問題ありません。Excelでは「09/07/12」になります。

だから私はデータと呼ばれるリストを持っています、これはその行の1つのプリントです

['07/09/12', 'LARO', 'MEDITERRAN', '245', 'UZES', '11', '0', '0', '0', '0', '11', '0']

私はこのコードでExcelファイルに入れています:

最初にファイルを開きます(xlは「withself asxl」を使用しているためです)

def open(self):
    self.xl.Visible = 1
    self.xl.ScreenUpdating = False
    self.worksheet = self.xl.Workbooks.Open(self.getOutputFile())

次に、データワークシートを消去します

def cleanData(self):
    sheet = self.xl.Sheets(self.sheetName)
    def findNumberOfLines(start_line):
        nb = 0
        while sheet.Cells(start_line + nb, self.startColumn).Value is not None:
            nb += 1
        return nb

次に、データを入力します

def fillData(self):
    sheet = self.xl.Sheets(self.sheetName)
    noRow = self.startLine
    for row in self.data:
        noCol = self.startColumn
        for i, value in enumerate(row):
            sheet.Cells(noRow, noCol).Value = value
            noCol+=1
        noRow+=1

そして私は保存します

def save(self):
    self.worksheet.Save()

そして、日と月がExcel内で反転されていることを除いて、すべてが良好です(US形式では表示されず、月と日が反転されたEUR形式が表示されます(10月3日は3月9日となり、「長い日付」形式を使用してテストされます)

奇妙なことに、日付を含むExcelセルは「標準」に設定されていますが、Pythonスクリプトによってファイルされると、「日付」に設定されます。

シートに記入するときの回避策 私はすべての日付を傍受し、それらを日時に変換しています、Excelはそれが好きなようです

def fillData(self):
    sheet = self.xl.Sheets(self.sheetName)
    noRow = self.startLine
    pattern = re.compile('^\d+/\d+/\d+$')
    for row in self.data:
        noCol = self.startColumn
        for i, value in enumerate(row):

            if (pattern.match(str(value))):
                date = value.rsplit('/')
                sheet.Cells(noRow, noCol).Value = datetime(int(date[2]), int(date[1]), int(date[0]))
            else: sheet.Cells(noRow, noCol).Value = value
            noCol+=1
        noRow+=1
4

1 に答える 1

2

Excelに指示しない限り、日付を「賢く」しようとします。つまり、形式が何であるか、変換された日付をどのように表示するかを推測します。

ほとんどの場合、それは望ましくありません。このようなファイルは、コンピュータの日付形式が異なる場合、またはユーザーが OS のデフォルトを変更した場合に異なる表示になります (一部のアメリカ人でさえ、標準の MM/DD/YY よりも DD/MM/YY を好みます)。

したがって、正しい解決策はdatetime、文字列値の代わりにすることです。これはうまくいきます。内部の COM フレームワークがwin32comPythondatetimeオブジェクトを対応する Excel 日付オブジェクトに変換し、書式を正しく設定するためです。

于 2013-03-05T15:49:53.890 に答える